2016-03-23 9 views
1

Laravel 4Laravel erhalten alle verwandten Modelle in einer Sammlung/array

Gibt es eine einfache Möglichkeit, alle zugehörigen Modelle in einer Sammlung zu bekommen (nur bei Eloquent)?

Zum Beispiel möchte ich alle Schüler bekommen, dass zu viele Klassen verwandt ist:

Zuerst muss ich mit den Beziehungen eine Sammlung erhalten:

$classes = Class::with('students')->whereIn('code', ['A', 'B'])->get(); 

Dann muss ich gehen durch die gesamte Kollektion, die Schüler zu fusionieren:

$allStudents = new Collection; 

foreach ($classes as $class) { 
    $allStudents = $allStudents->merge($class->students); 
} 

Oder wenn ich nur einen Schlüssel benötigen, beispielsweise id des Schülers, ich tue dies:

$allStudentsIds = []; 

foreach ($classes->fetch('students') as $studentsArray) { 
    $allStudentsIds = array_merge(
     $allStudentsIds, array_pluck($studentsArray, 'id') 
    ); 
} 

Gibt es eine Methode, um nur verwandte Modelle zu erhalten? Oder irgendwie kann ich es durch eine Anfrage an das Student Modell schaffen?

Antwort

0

Abfrage basierend auf Studenten und Join mit Klassen?

Student::select('student.*') 
->join('class_student', 'class_student.student_id', '=', 'student.id') 
->join('class', 'class.id', '=', 'class_student.class_id') 
->whereIn('class.id', $classes) 
->get(); 

So ähnlich.

Ich nahm an, es ist eine viele zu viele Beziehung und class_student ist die Zuordnungstabelle

Verwandte Themen