Laravel LIMIT отношение с использованием Eloquent

У меня есть куча Shopс и Itemс. В каждом магазине может быть несколько разных предметов. Тем не менее, я хочу получить все магазины, всего по 4 предмета в каждом.

Следующее дает мне все магазины, со всеми их пунктами:

$shops = Shop::with('items')->get();

Следующее дает мне все магазины, но только с Всего 4 предмета, и не каждый.

$shops = Shop::with(array('items' => function($query) {
$query->take(4);
}))->get();

Как мне получить все магазины по 4 предмета в каждом?

2

Решение

Это связано с ограничением SQL.
Когда хочется что-то загрузить, laravel генерирует SQL-запрос, который выглядит как

SELECT * FROM xyz WHERE id IN (1, 2...) LIMIT 4;

Таким образом, механизм SQL возвращает только 4 строки.

Я не могу найти быстрый способ обойти это в Laravel. Даже в сыром SQL эту проблему трудно решить.

Некоторое чтение на эту тему Как выбрать первую / наименьшую / максимальную строку на группу в sql.

0

Другие решения

Shop::with(array('items' => function($query) {
$query->limit(4);
}))->get();

Замена take with limit должна решить вашу проблему.

0

По вопросам рекламы [email protected]