我有以下查询打败了我的数据库,因为它为每个关系创建一个查询:
$projects = $this->project->all()->sortBy(function ($item) {
return $item->votes()->count();
}, SORT_REGULAR, true)->take(30);
我尝试了很多不同的方法:
$projects = $this->project->with('Vote')->all()->sortBy(...)->take(30);
调用未定义的方法Illuminate \ Database \ Query \ Builder :: all()
$projects = $this->project->with('Vote')->get()->sortBy(...)->take(30);
调用未定义的方法Illuminate \ Database \ Query \ Builder :: Vote()
...
在模板中,我循环遍历项目并使用$project->votes()->count()
进行急切加载的正确方法是什么?
答案 0 :(得分:0)
我认为问题可能是中间的all()
。尝试删除all()
并在结尾添加get()
。此外,您可以使用例如Project::
如果您不想调用实例,则进行Eloquent查询。
$projects = Project::with('vote')->sortBy(...)->take(30)->get();
我认为应该解决这个问题。如果您不需要任何其他项目数据,而是需要投票,那么您也可以执行groupBy
而不是循环遍历所有内容然后执行count()
。