【问题标题】:Eager load single item with Eloquent belongsToMany使用 Eloquent belongsToMany 急切加载单个项目
【发布时间】:2014-09-03 00:37:57
【问题描述】:

我有一个批处理模型,它有许多结果并且属于一个项目。批次的当前状态基于其最新结果的状态。所以,在我的批处理模型中,我有这个:

public function allForProject($pid)
{
    $batches = $this
        ->with(static::$relatedObjects)
        ->with('current_status')
        ->where('project_id', '=', $pid)
        ->get();
    return $batches;
}

public function current_status()
{
    return $this
        ->belongsToMany('BehatEditor\Models\Result')
        ->orderBy('created_at', 'DESC')
        ->limit(1)
        ;
}

...所以通过说“->with('current_status')”,我试图只加载该批次的最新结果 - 每批次可能有数千个我不想返回前端。

现在,这并没有中断,但“limit(1)”实际上似乎限制了与结果一起返回的批次数量。即使我的每个批次都有我的测试数据的 2 个结果,但当我使用 limit(1) 时,其中只有一个会返回任何数据。当我使用 limit(2) 时,只有 2 个批次返回单个 current_status 记录(需要),但其余批次有一个用于 current_status 的空数组。

这是一个使用 Eloquent 作为 ORM 的 Silex 项目,因此 Laravel 特定的方法不起作用。

非常感谢任何帮助!

更新:

看起来 Eloquent 不支持这一点。见http://irclogs.julien-c.fr/2013-12-19/01:48#log-52b25061a599aafb54008650。我想将我的问题更新为如何将我需要的原始 SQL 干净地添加到我的查询中?我可以提供自己的方法来只保存所需的 SQL,还是需要替换 allForProject() 中的所有 ORM 用法?

【问题讨论】:

  • 真的是belongsToMany 还是hasMany,正如你在第一段中所说的那样?
  • @crypticsymbols 您的更新是否仍然适用或已在 Laravel 中实现?

标签: laravel eloquent


【解决方案1】:

->first()代替->limit(1)

更新:误读了你所说的,这应该有效。

【讨论】:

  • 嗯...这会引发“调用未定义的方法 Illuminate\Database\Query\Builder::addEagerConstraints()”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 2018-03-29
  • 2013-06-10
相关资源
最近更新 更多