使用Laravel 5.2。
我有3个型号;调查,小组和问题。
我可以按如下方式定义我的Survey模型;
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有关,但我无法弄清楚。
答案 0 :(得分: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();
这看起来并不漂亮,但非常优雅,完美地完成了这项工作。不需要更改此模型所需的模型。