2017-04-23 3 views
0

내 코드 :이 솔루션에서Laravel 피벗 열 필터링

$course = Course::find(1); 
$teachers = $course->Users()->where('role_id', 1)->get(); 
$students = $course->Users()->where('role_id', 2)->get(); 

, 나는 두 개의 서로 다른 사용자 유형이있다. Users() 함수는 belongsToMany 관계입니다.

public function Users() 
{ 
    return $this->belongsToMany(User::class, 'course_users')->withPivot('role_id'); 
} 

그리고 내 course_users 테이블 컬럼 : USER_ID, Course_ID에는 제대로 실행

이 코드를 ROLE_ID.

그러나 쿼리를 살펴보면이 상황에 대해 두 가지 SQL 쿼리를 보았습니다. 하나의 쿼리 만 사용하고 필터링 된 값만 성능에 적합한 변수로 가져 오려고합니다. 내가 어떻게 해?

아래 코드를 시도했습니다. 하지만 첫 번째 변수 $ 교사 만 가져 오지만 $ 학생은 가져 오지 않습니다.

$users = $course->Users(); 
$teachers = $users->where('role_id', 1)->get(); 
$students = $users->where('role_id', 2)->get(); 

귀하의 의견은 무엇입니까? 감사합니다.

$users = $course->Users()->whereIn('role_id', [1, 2])->get(); 

을 그리고 데이터 필터링 컬렉션을 사용합니다 : 하나의 쿼리를 가지는 것이 중요 경우

답변

-2

감사합니다. 나는 이렇게 풀었다.

$users = $course->Users()->whereIn('role_id', [1, 2])->get(); 
$teachers = $users->where('pivot.role_id', 1); 
$students = $users->where('pivot.role_id', 2); 
1

,이 같은 데이터를로드 할 수 있습니다

$teachers = $users->where('role_id', 1); 
$students = $users->where('role_id', 2); 
+0

나는 $ users가 3 개의 항목을 가져 오려고했습니다. $ teacher와 $ students 항목은 비어 있습니다. 그밖에 또 무엇이 문제가 될 수 있습니까? – Cem