⚡️ Laravel: withCount() — считаем связи без лишних запросов
Автор:
Eugeny Nosenko
Дата публикации:
2025-08-23 14:10:54 27

Вместо того чтобы делать отдельный 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();
🚀 Идеально, когда нужно вывести статистику по связанным моделям без перегрузки БД.