Запросы к связанным моделям с использованием Laravel 4 и Eloquent

Используя Laravel 4, у меня есть следующие модели и отношения: Событие, у которого есть много записей, у которых есть много элементов. Я хотел бы сделать что-то вроде этого

Item::where('events.event_type_id', 2)->paginate(50);

Это не работает, так как Eloquent не СОЕДИНЯЕТ модели вместе при извлечении записей. Итак, как мне это сделать, не просто написав SQL самостоятельно (чего я хотел бы избежать, поскольку я хочу использовать разбивку на страницы).


person Kanten    schedule 29.05.2013    source источник
comment
Я не думаю, что это возможно. Однако в Github есть запрос, который позволит вам сделать что-то вроде этого: github.com/laravel/ рамки/проблемы/1166   -  person Philo    schedule 30.05.2013


Ответы (2)


Вам нужна нетерпеливая загрузка.

Это работает так, если вы хотите указать дополнительные ограничения:

Item::with(array('events' => function($query) {
    return $query->where('event_type_id', 2);
}))->paginate(50);
person Franz    schedule 30.05.2013
comment
Это прекрасно работает, но на моем сайте будет тысяча записей, и, насколько я вижу, активная загрузка работает с использованием IN(...). Разве это не ужасно неэффективно по сравнению с использованием соединений SQL? - person Kanten; 30.05.2013
comment
Поскольку вы разбиваете на страницы, существует ограничение. Я бы не назвал это ужасным, но я думаю, что это было значительно проще реализовать и дает нам больше гибкости для типов запросов, которые мы можем запускать при выборке элементов. - person Franz; 30.05.2013
comment
Если бы вы сделали это с соединениями, вам пришлось бы каким-то образом различать поля элемента и поля событий при гидратации моделей, поэтому также были бы некоторые накладные расходы. Кроме того, вы извлекаете меньше избыточных данных, поскольку каждый элемент извлекается только один раз, даже если он имеет несколько событий. - person Franz; 30.05.2013