@yellow_pus

Как сделать пагинацию для коллекций со связью?

У меня есть контроллер, который выводит весь список категорий и привязанных к ним статей:
$posts = PostResource::collection(Categories::with('posts')->get());
        return view('home',['posts'=>$posts]);

Он обернут в ресурс, который выглядит вот так:
return [
            'id' => $this->id,
            'category_name' => $this->category_name,
            'posts' => CategoryResource::collection($this->posts)
        ];

На данный момент, вываливаются все категории и посты сразу, но так как много статей привязаны к одной категории, я хотел бы сделать пагинацию таким образом: вываливаются 3 категории и 5 привязанных к ней статьи. Как такое можно реализовать?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Наверное если нужна прям пагинация, то логичнее возвращать не статьи, а количество статей и отдельным запросом получать уже ресурс-статьи с пагинацией.
Если просто топ-5 статей нужно, то проще всего в контроллере извратиться и загрузить в цикле к каждой выводимой категории топ 5 статей через lazy contrained loading, иначе сделать отдельную связь типа lastPosts, которая бы возвращала коррелированный запрос, возвращающий пять последних статей для списка категорий
Ответ написан
pLavrenov
@pLavrenov
Разработка сайтов
return Model::where('some',  'one')->paginate(3)->map(function($model) {
    return tap($model)->setRelation('relation', $model->relations->take(5));
});


У меня пока нет возможности проверить поэтому навскидку. Позже проверю изменю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы