【发布时间】: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 中实现?