2016-03-22 14 views
1

Verwenden von Laravel 5.2.Eager laden mit wo Beziehung auf hasManyThrough

Ich habe 3 Modelle; Umfrage, Gruppe und Frage.

Ich kann mein Vermessungsmodell wie folgt definieren;

class Survey extends Model 
{ 
    public function groups() 
    { 
     return $this->hasMany('App\Models\Group', 'survey_id'); 
    } 

    public function questions() 
    { 
     return $this->hasManyThrough('App\Models\Question', 'App\Models\Group'); 
    } 
} 

und dann in meinem Controller kann ich tun;

$survey = Survey::where('slug', $surveySlug)->first(); 

$survey->load('groups', 'questions'); 

dd($survey); 

zu eifrig Last alle die zugehörigen Gruppen und Fragen für eine Umfrage. aber ist es möglich, eifrig zu laden nur die gruppen und fragen für eine bestimmte gruppe? (also 1 Umfrage, 1 Gruppe, aber mehrere Fragen) ??

In meiner Steuerung habe ich Zugriff auf die aktuelle Gruppe über $groupSlug, die als slug in der Gruppentabelle definiert ist. Wie kann ich das benutzen?

Ich habe das Gefühl, es könnte etwas mit constraining eager loads zu tun haben, aber ich kann es nicht herausfinden.

Antwort

1

Mit eifrig Lastbeschränkungen:

$survey = Survey::with(['questions' => function($query) use ($groupSlug) { 
    $query->where('groups.slug', $groupSlug); 
}, 'groups' => function($query) use ($groupSlug) { 
    $query->where('groups.slug', $groupSlug); 
}])->whereSlug($surveySlug)->first(); 

Das ist nicht schön zu sehen, aber ist sehr elegant und macht den Job perfekt. Keine Änderungen am dafür benötigten Modell.

Verwandte Themen