Laravel-使用多个“with()”急切加载并对所有对象运行查询


Laravel - Using multiple `with()` eager load AND running a query on all

所以我想急切地加载几个关系(如下所示),它可以正常工作。然而,我想在这个热切的负载上运行一个函数(如下所示)。通常情况下,我只在一个热切的负载关系中这样做,但我想在所有三个关系中都这样做。但是该查询仅适用于最后一个热切加载(即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();

这是不可能的,因为幼虫会进行单独的查询来填充关系,相反,您可以使用以下方法:

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

另一种替代方案是将JOINSQuery Builder一起使用。