2016-03-22 10 views
1

Laravelの使用5.2。ここで、関係はhasManyThroughでの関係を使用しています。

私は3つのモデルを持っています。調査、グループ、および質問。

私の調査モデルは、次のように定義できます。

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'); 
    } 
} 

次に、私のコントローラーで行うことができます。熱心な負荷調査のためのすべての関連グループとの質問に

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

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

dd($survey); 

。熱心に負荷することが可能ですのグループと質問特定のグループですか? (1調査、1グループ、複数質問)??

私のコントローラでは、$groupSlugで現在のグループにアクセスしています。これはグループテーブルのslugと定義されています。だから私はそれをどのように使うことができますか?

constraining eager loadsとは関係がありますが、わかりません。熱心な負荷の制約を使用して

答えて

1

$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(); 

これは見てきれいではありませんが、非常にエレガントで、完璧に仕事をしていません。これに必要なモデルに変更はありません。