красноречиво получить 4 сообщения из всех категорий - PullRequest
1 голос
/ 03 октября 2019

У меня есть несколько категорий и много сообщений в каждой категории. Я хочу получить все категории с его последними 4 сообщениями

Мой код с eloquent:

$allcats = Category::whereHas('posts')->with(['posts' => function($q){
            $q->take(4);
}])->get();

, но проблема в следующем:этот запрос займет всего 4 сообщения (4 сообщения из всех категорий)

может сделать это с помощью eloquent? или может id сделать это с помощью построителя запросов ??

1 Ответ

0 голосов
/ 03 октября 2019

Из документов Laravel на Ограничение активных нагрузок

[!] Методы построения запросов limit и take могут не использоваться при ограничении активных нагрузок.

Таким образом, вам нужно создать еще один метод отношений в вашем классе Category, например,

public function lastPosts()
{
  return $this->hasMany('App\Post')->take(4);
}

, а затем использовать его

$allcats = Category::whereHas('posts')->with('lastPosts')->get();

Или использоватьнеобработанный запрос

$allcats = Category::whereHas('posts')->with(['posts' => function($q){
            $q->orderBy('created_at')->selectRaw('max(4)');
}])->get();

Надеюсь, это поможет

...