Comments 8
А вот на примере таблиц habrahabr.ru/post/229905/
как вывести product соеденив все 4 таблицы (товар, категорию товара, имена фильтров и их значения)
как вывести product соеденив все 4 таблицы (товар, категорию товара, имена фильтров и их значения)
То вы наверняка знаете, что Eloquent производит загрузку связанных данных отдельным запросом и ни фильтрация, ни сортировки по ним работать не будут.
Ну, вообще-то, фильтровать можно:
$objects = Model::whereHas('relation', function($query) use ($filter)
{
$query->whereFilter($filter);
})->get();
А насчет «упорядочить», это нужно подумать… возможно тоже что-то есть.
возможно даже это пройдет:
$query->whereFilter($filter)->orderBy('order');
но я не берусь утверждать.Если посмотреть на генерируемый запрос, то это не совсем то. Eloquent использует подзапрос для подсчета количества связанных записей, удовлетворяющих условию, соответственно с загрузкой это ничего общего не имеет. То есть по сути будет произведено целых два с половиной запроса (основной, в котором будет подзапрос считающий количество по фильтру, и запрос на загрузку связанных данных).
В моем же случае все это укладывается в один запрос, плюс на мой взгляд код чище.
В моем же случае все это укладывается в один запрос, плюс на мой взгляд код чище.
Спасибо, это действительно очень нужная функциональность.
github.com/sleeping-owl/with-join/issues/14
github.com/sleeping-owl/with-join/issues/14
Sign up to leave a comment.
Загрузка Eloquent связей используя left join вместо дополнительных запросов