У меня есть куча Shop
с и Item
с. В каждом магазине может быть несколько разных предметов. Тем не менее, я хочу получить все магазины, всего по 4 предмета в каждом.
Следующее дает мне все магазины, со всеми их пунктами:
$shops = Shop::with('items')->get();
Следующее дает мне все магазины, но только с Всего 4 предмета, и не каждый.
$shops = Shop::with(array('items' => function($query) {
$query->take(4);
}))->get();
Как мне получить все магазины по 4 предмета в каждом?
Это связано с ограничением SQL.
Когда хочется что-то загрузить, laravel генерирует SQL-запрос, который выглядит как
SELECT * FROM xyz WHERE id IN (1, 2...) LIMIT 4;
Таким образом, механизм SQL возвращает только 4 строки.
Я не могу найти быстрый способ обойти это в Laravel. Даже в сыром SQL эту проблему трудно решить.
Некоторое чтение на эту тему Как выбрать первую / наименьшую / максимальную строку на группу в sql.
Shop::with(array('items' => function($query) {
$query->limit(4);
}))->get();
Замена take with limit должна решить вашу проблему.