Laravel Eager加载不可能

时间:2014-03-27 07:39:39

标签: laravel laravel-4 eloquent eager-loading

我有以下查询打败了我的数据库,因为它为每个关系创建一个查询:

$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()

进行急切加载的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为问题可能是中间的all()。尝试删除all()并在结尾添加get()。此外,您可以使用例如Project::如果您不想调用实例,则进行Eloquent查询。

$projects = Project::with('vote')->sortBy(...)->take(30)->get();

我认为应该解决这个问题。如果您不需要任何其他项目数据,而是需要投票,那么您也可以执行groupBy而不是循环遍历所有内容然后执行count()