【问题标题】:Laravel4 Eager Loading not possibleLaravel Eager Loading 不可能
【发布时间】:2014-03-27 07:39:39
【问题描述】:

我有以下查询,它击败了我的数据库中的废话,因为它对每个关系都进行了一次查询:

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

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

【问题讨论】:

  • 对不起!我已经删除了答案,因为它不起作用,如果我能使它起作用,我会发布。
  • 感谢您的努力,但我会尝试不同的解决方案!

标签: laravel laravel-4 eloquent eager-loading


【解决方案1】:

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

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

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

【讨论】:

  • 这给了我Call to undefined method Illuminate\Database\Query\Builder::sortBy()
  • 使用Project:: 而不是$this->project,这样行吗?你确定你已经创建了一个扩展 Eloquent 的 Project 模型吗?
  • 我有不同的项目模型这就是为什么我得到这样的项目模型public function __construct(){ $this->project = App::make('Project'); } 适用于所有其他目的,不能说这是否是问题。
  • 但是$projects = Project::with('vote')->sortBy(...)->take(30)->get(); 仅在末尾输出get() 是什么?
  • 什么都没有,因为我收到此错误:Call to undefined method Illuminate\Database\Query\Builder::sortBy()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2017-08-19
  • 1970-01-01
  • 2014-07-18
  • 2020-05-23
  • 2020-11-09
  • 2017-09-17
相关资源
最近更新 更多