Используя Laravel 4, у меня есть следующие модели и отношения: Событие, которое имеет запись Many, имеющая hasMany Item. То, что я хотел бы сделать, это нечто подобное
Item::where('events.event_type_id', 2)->paginate(50);
Эта причина не работает, поскольку Eloquent не присоединяется к моделям вместе при получении записей. Итак, как мне обойти это, просто не написав сам SQL (чего я бы хотел избежать, поскольку хочу использовать разбивку на страницы).
То, что вы хотите, – это нетерпеливая загрузка .
Он работает так, если вы хотите указать дополнительные ограничения:
Item::with(array('events' => function($query) { return $query->where('event_type_id', 2); }))->paginate(50);
Запрос на растяжение ожидается здесь https://github.com/laravel/framework/pull/1951 .
Это позволит вам использовать ограничение на метод has (), что-то вроде этого:
$results = Foo::has(array('bars' => function($query) { $query->where('title', 'LIKE', '%baz%'); })) ->with('bars') ->get();
Идея заключается в том, что вы возвращаете только Foos, которые имеют связанные бары, которые содержат строку «baz» в столбце заголовка.
Это также обсуждается здесь: https://github.com/laravel/framework/issues/1166 . Надеюсь, он скоро будет объединен. Прекрасно подходит для меня, когда я обновляю локальную копию класса Builder с обновленным кодом в запросе pull.