Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 26.03.2017 15:56:35

Eager loading и limit на количество записей

Вообщем проблема.  Необходимо загрузить все категории с постами, но количество постов в каждой категории ограничить например 3мя.
Финт ушами ниже не пройдет так как лимит сразу ко сем постам применяется

Category::with(['posts' => function ($query) {
    $query->orderBy('created_at', 'desc')
          ->limit(3);
    }])
->get();

Кто сталкивался с такой проблемой?

PS сейчас сделано немного иначе, но вместо 1 запроса получается куча

foreach($categories as $category){

$posts = $category->postsPublic()->limit(3)->get();

foreach( $posts as  $post){
///////////////////////////////////////
}
}			

в разработке

Не в сети

#2 26.03.2017 18:40:40

Re: Eager loading и limit на количество записей

здесь вина не элоквента, в самом SQL такой номер провернуть непросто. вот тут https://softonsofa.com/tweaking-eloquen … er-parent/ автор предлагает решение, предупреждаю заранее – очень грязное. и код написан под laravel 4.x, так что его ещё надо адаптировать.

если количество категорий не сильно большое, может проще оставить запросы в цикле, а проблему с нагрузкой решить путём кэширования результатов выборки?

Не в сети

#3 26.03.2017 19:00:48

Re: Eager loading и limit на количество записей

Мда... Боюсь придется так оставить.

Сейчас сами категории закешированы. А вот посты не закешировать никак(хотя сам пост как единица закеширована). Нужна актуальность постов с точностью до минуты.


в разработке

Не в сети

Подвал раздела