Вместо того чтобы делать отдельный 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();

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

Евгений Носенко

Евгений Носенко

Fullstack разработчик · Мастерская кода

Проектирует и разрабатывает системы автоматизации, CRM, интеграции и внутренние сервисы для бизнеса.

Хотите такой же результат?

Бесплатно посчитаем ваш проект и покажем, где автоматизация даст максимальный эффект.

Обсудить проект →