使用hasManyThrough上的关系的急切加载

时间:2016-03-22 13:44:30

标签: php oop laravel laravel-5

使用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有关,但我无法弄清楚。

1 个答案:

答案 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();

这看起来并不漂亮,但非常优雅,完美地完成了这项工作。不需要更改此模型所需的模型。