Eloquent Relationship

  • Hallo zusammen,


    hier mein DB Diagramm:

    MPA-DB Diagramm


    wie kann ich aus dem Modell Testee die auditors und die Evaluation abrufen?





    Testee->results ist kein Thema


    Code
    1. Testee::find(1)->results()->get()


    aber wie kann ich mir den Auditor über Many to Many anzeigen lassen und wie bekomme ich das examinatiosubject?

  • Hallo Matze,

    wie du sicherlich weißt bekommst du hiermit eine Collection:

    Code
    1. $results = Testee::find(1)->results()->get();
    2. // oder
    3. $results = Testee::find(1)->results;

    Collections verhalten sich ähnlich zu PHP Arrays, haben allerdings einige spannende Funktionen. Siehe Dokumentation.

    Du kannst auf die Auditors und Testsubject zugreifen wie du es mit Werten in einem PHP Array gewohnt bist. Zum Beispiel so:

    Code
    1. $results = Testee::find(1)->results;
    2. foreach($results as $result) {
    3.     foreach($result->auditors as $auditor) {
    4.         echo $auditor->firstname;
    5.     }
    6. }

    Ähnlich dann auch mit den examinationsubjects.


    Zusätzlich stellt Laravel eine hasManyTrough Methode zur Verfügung. Siehe Dokumentation.

    Dazu musst du in der Testee Klasse folgendes definieren:

    Code
    1. class Testee extends Model
    2. {
    3. // Dein Code ...
    4. public function auditors()
    5. {
    6. return $this->hasManyThrough('App\Models\Result', 'App\Models\Auditor');
    7. }
    8. }

    Du kannst dann die Auditors eines Testees wie folgt abrufen.

    Code
    1. $testee = Testee::find(1);
    2. $auditors = $testee->auditors;
    3. // oder
    4. $auditors = $testee->auditors()->get();

    Du bekommst somit direkt die Auditors ohne zuerst dir alle Ergebnisse abzurufen. Ich weiß aber nicht ob das mit mehreren hintereinander geketteten Many-to-Many Beziehungen funktioniert. Das musst du ausprobieren.


    Ich hoffe ich konnte dir weiterhelfen.