Laravel - 使用多个`with()`eager load并在所有

时间:2016-07-19 20:58:46

标签: php laravel laravel-5.2

所以我想加载几个关系(如下所示),它可以正常工作。但是,我想在那个急切的负载上运行一个函数(如下所示)。通常我只在一个急切的负载关系上这样做,但我想在所有这三个上做。但该查询仅适用于最后一次加载(即instagram_oauths)。

是否有办法急切加载多个关系 AND 运行适用于所有3种关系的单独查询?以下不会导致错误...仅将return $oauth->withWeeklyStats($date);应用于上一个with变量instagram_oauths

return $data = Team::currentTeam()->with(['facebook_oauths', 'twitter_oauths', 'instagram_oauths' => function($oauth) use ($date) {
    return $oauth->withWeeklyStats($date);
}])->get();

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为larval会进行单独的查询以填充关系,相反,你可以使用它:

Team::currentTeam()->with(array_fill_keys(['facebook_oauths', 'twitter_oauths', 'instagram_oauths'], function($oauth) use($date) {
        return $oauth->withWeeklyStats($date);
}))->get();

另一种方法是将JOINSQuery Builder一起使用。