У меня есть пакетная модель, которая имеет множество результатов и принадлежит к проекту. Текущий статус партии основан на статусе последнего результата. Так, в моей пакетной модели у меня есть это:Eager load single item with Eloquent принадлежитToMany
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)
;
}
... Так что, говоря «-> с („CURRENT_STATUS“)» Я пытаюсь нетерпеливый нагрузки только самый последний результат для этой партии - там может быть тысячами из них за каждую партию, которую я не хочу возвращать на передний план.
Теперь это не сломается, но «limit (1)» фактически ограничивает количество партий, которые возвращаются с результатом. Хотя каждый из моих партий имеет 2 результата с моими тестовыми данными, когда я использую limit (1), только один из них возвращается с любыми данными. Когда я использую limit (2), только две партии возвращаются с единственной записью current_status (желательно), а остальные имеют пустой массив для current_status.
Это проект Silex с использованием Eloquent как ORM, поэтому специальные методы Laravel не будут работать.
Любая помощь очень ценится!
UPDATE:
Похоже, красноречивый просто не поддерживает это. см. http://irclogs.julien-c.fr/2013-12-19/01:48#log-52b25061a599aafb54008650. Я хотел бы обновить свой вопрос: как я могу чисто добавить необработанный SQL, который мне нужен для моего запроса? Могу ли я предоставить свой собственный метод, который содержит только необходимый SQL, или мне нужно заменить все использование ORM в allForProject()?
Действительно ли это 'принадлежит ToMany' или' hasMany', как вы говорите в своем 1-м абзаце? –
@crypticsymbols - ваше обновление по-прежнему применимо или оно было реализовано в Laravel? – djt