2017-11-28 4 views
0

Für eine Schulplattform möchte ich mit allen Studenten, die in einer Klasse mit einer bestimmten Schuljahr eingeschrieben sind Liste haben. In dieser Liste möchte ich die ID, last_name, first_name und den Klassennamen jedes Schülers sehen.Eager Laden verschachtelten Beziehungen

Der vollständige Name + + ist kein Problem, aber das Laden aller Beziehungen und das Anzeigen des vollständigen Klassennamens mit Grad funktioniert nicht.

meine Beziehungen sind wie folgt:

student -> hasMany -> Enrollments 
-----------Enrollments -> belongsTo -> offering 
--------------------------offering -> belongsTo -> schoolClasses 
--------------------------offering -> belongsTo -> schoolyears 
--------------------------------------schoolClass -> belongsTo -> grade 

Der Klassenname Name aus der Klasse Namen + Klasse besteht (zum Beispiel Kindergarten 1 + A).

Mein EER ist wie folgt:

EER diagram

Zur Zeit habe ich diese Arbeit:

enter image Example here

Durch dieses in meinem Controller tun:

$students = Student::with('offerings.schoolClasses.grades')->get(); 
return view('student.overview', ['students' =>$students]); 

und diese aus meiner Sicht:

@foreach($students as $student) 
<tr> 
    <th scope="row">{{$student->id}}</th> 
    <td>{{$student->first_name}}</td> 
    <td>{{$student->last_name}}</td> 
    <td>{{$student->offerings}}</td> 
</tr> 
@endforeach 

Könnte jemand mir helfen, die letzten Bits zu bekommen?

+0

Ihr EER Bild fehlt 'Student' Modell. –

+0

Studenten sind Benutzer, tut mir leid, ich habe das nicht erwähnt. Das Schülermodell ist ein Modell, das auf dem Benutzermodell basiert, überprüft jedoch, ob ein Benutzer angemeldet ist. –

+0

Ich sehe Einschreibung ist eine "Join" -Tabelle, oder wie Laravel nennen es eine "Pivot" -Tabelle. Du könntest Hilfe von [Laravel Dokumentation über Beziehungen von Vielen zu Vielen] (https://laravel.com/docs/5.5/eloquent-relationships#many-to-many) verwenden. Sie werden einen ähnlichen Fall von Ihnen finden. –

Antwort

0

ich herausgefunden habe, was falsch war, die Definition meiner Beziehungen in meinem Modelle enthielten keinen Fremdschlüssel zum Referenzieren.

hatte ich explizite Fremdschlüssel hinzuzufügen, wenn die Beziehung Referenzierung:

public function schoolClass(){ 
    return $this->belongsTo(SchoolClass::class,'school_class_id'); 
} 

public function schoolyears(){ 
    return $this->belongsTo(Schoolyear::class,'schoolyear_id'); 
} 

Das school_class_id und schoolyear_id wo notwendig, alles richtig zu laden.

0

denke ich Sie so versuchen:

$students = Student::with('offerings.schoolClasses.grades') 
->with(array('offerings.schoolYears'=>function($query){ 
     $query->where('start', '=', $somedate) 
    })) 
->get(); 

und Sie können dies versuchen, die Klasse zu zeigen:

{{$student->offerings->schoolClasses->grades->grade}} 
+0

Leider funktioniert das nicht, es scheint, dass die Schulklassen und Schuljahre null zurückgeben. Wenn ich meine Datenbank überprüfe, scheint es, dass der betreffende Student eine Registrierung hat, die mit einem Angebot mit einer Klasse und einer Note verknüpft ist. Normalerweise sollte das funktionieren. Hast du eine Ahnung, wo es schief geht? –

+0

Sie sollten mehr von Ihrem Code zeigen, wie Modelle und Beziehungen, wie @Anwar_Nairi wies darauf hin, Einschreibungen sollte durch eine Pivot-Tabelle der vielen zu viele Beziehung zwischen Benutzern und Angeboten, wenn wir mehr Code sehen, kann Ihnen vielleicht helfen. –

+0

Sie sind in der Tat richtig, diese Beziehungen wurden eingerichtet, aber wie ich herausgefunden habe, musste ich den Fremdschlüssel hinzufügen, wenn Beziehungen referenziert werden. Ich habe jetzt den Dreh raus. Danke euch beiden dafür, dass ihr mir geholfen habt :) –

Verwandte Themen