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