Laravel: Сортировка по количеству комментариев
В этой короткой заметке я покажу как можно сделать сортировку eloquent по колличеству связанных моделей.
Предположим вы решили сделать соритровку статей на сайте по популярности, где коофициентом популярности будет колличество комментариев к статье. Как же добиться подобного результата?
Решение как всегда в духе Laravel минималистичное и элегантное, нам всего лишь необходим метод withCount();
Итак предположим что у нас есть модель Node отвечающая за статьи и модель Comment отвечающая за комментарии, обе модели уже связанны методом many-tomany, по типу:
class Node extends Model
{
//....
public function comments()
{
return $this->hasMany('App\Comment', 'comment_post_ID', 'id');
}
//....
}
Теперь в контроллере где вы выводите ваши статьи нужно к модели Node прицепить метод withCount() вот таким образом:
Node::withCount('comments')->orderBy('comments_count', 'desc');
Далее вы можете добавлять свои прочие методы сортировки и фильтрации. Вот так это может выглядеть с другими параметрами:
Node::withCount('comments')
->orderBy('comments_count', 'desc')
->where('status', 'publish')
->paginate(12);
return view('articles')->with('nodes', $nodes);
Вот так просто можно делать сортировки по связанной модели в Laravel!