⚡️ Laravel: withCount() — считаем связи без лишних запросов
Автор:
Eugeny Nosenko
Дата публикации:
2025-08-23 14:10:54 269
Вместо того чтобы делать отдельный 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();
🚀 Идеально, когда нужно вывести статистику по связанным моделям без перегрузки БД.