2017-04-23 5 views
0

Meine Codes:Laravel Pivot Column Filtering

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

Bei dieser Lösung habe ich zwei verschiedene Benutzertypen. Die Funktion "users()" ist eine "goesToMany" -Beziehung.

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

Und meine course_users Tabellenspalten: user_id, course_id, ROLE_ID

richtig läuft Diese Codes.

Aber als ich auf Abfragen schaute, sah ich zwei SQL-Abfragen für diese Situation. Ich möchte nur eine Abfrage verwenden und nur gefilterte Werte zu geeigneten Variablen für die Leistung abrufen. Wie kann ich es tun?

Ich versuchte unter dem Code. Aber es werden nur die ersten variablen $ Lehrer, aber nicht die $ Schüler gewonnen.

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

Was sind Ihre Meinungen? Danke.

Antwort

-2

Dank. Ich habe das gelöst.

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

Wenn nur eine Abfrage mit wichtig ist, können Sie die Daten wie folgt laden:

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

Und dann die Sammlung verwenden, um Daten zu filtern:

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

ich versuchte das, $ users, die 3 Einzelteile holen. aber $ lehrer und $ studenten sind leer. Was kann das Problem noch sein? – Cem