⚡️ Laravel: withCount() — считаем связи без лишних запросов

Автор: Eugeny Nosenko
Дата публикации: 2025-08-23 14:10:54   27


⚡️ Laravel: withCount() — считаем связи без лишних запросов

Вместо того чтобы делать отдельный count() для каждой модели, можно попросить Laravel добавить поле прямо в запрос.

$users = User::withCount('posts')->get();

foreach ($users as $user) {
    echo $user->name . ' — ' . $user->posts_count . " постов\n";
}

📌 Что происходит:

  • Laravel добавляет SELECT COUNT(*) в основной запрос
  • Нет N+1 проблемы (не делается отдельный запрос на каждый объект)
  • Поле называется {имя_связи}_count

💡 Можно даже фильтровать по этому полю:

User::withCount('posts')
    ->having('posts_count', '>', 5)
    ->get();

🚀 Идеально, когда нужно вывести статистику по связанным моделям без перегрузки БД.


Оставить комментарий:
Имя:
Комментарий: