Получение данных по связям Eloquent

248
11 октября 2017, 09:19

Решаю такую задачу. Есть Разделы (Partition), рубрики (Rubric), записи (Post).

Нужно получить 10 записей в каждой рубрике каждого раздела. Делал с помощью связей примерно так:

$partitions = Partition::with(['rubrics', 'posts'])->get();

В таком случае получаю всего 10 записей, а не 10 записей в каждой рубрике.

Переделал так:

$partitions = Partition::with(['rubrics'])->get();
foreach($partitions as $partition) {
    foreach($partition->rubrics as $rubric) {
        $rubric->load(['posts']);
    }
}

Так работает как надо, но запросов получается слишком много, а рубрик с ростом проекта будет все больше и больше.

Возможно ли решить данную задачу с помощью связей Eloquent? Если да, то как? А если нет - в какую сторону тогда копать?

Answer 1

Я так понял вы хотите через реляцию "жадной" выгрузкой забрать данные. Вложенные реляции просто нужно указать через точку:

$partitions = Partition::with('rubrics.posts')->get();

А если по 10 записей, попробуйте следующее:

$partitions = Partition::with(['rubrics.posts' => function ($query) {
    $query->limit(10);
}])->get();

P.S. В одном примере реляция rubrics, в другом rubric, не понятно какие настоящие из вашего вопроса.

READ ALSO
Регулярка, только пробелы \s, исключая \n

Регулярка, только пробелы \s, исключая \n

Пытаюсь заменить в строке пробелы повторяющиеся два и более раза на одинарные, вот так:

307
PHP connection fail [требует правки]

PHP connection fail [требует правки]

Парни, пытаюсь подключить serverphp к index

190
Добавляет пустые строки в бд

Добавляет пустые строки в бд

Хочу добавить в бд запись пишу в адресную строку http://project-546564codeanyapp

238
Запрос по столбцам, как сделать?

Запрос по столбцам, как сделать?

У меня есть 51 столбец, как можно оптимизировать этот код,чтобы не вбивать все столбцы? -- Получение 50 то что до | SELECT SUBSTRING_INDEX('50|100', '|', 1);

346