@verygoodboy

Как выглядит альтернативный запрос методу withCount через query builder и row sql?

Есть таблица users - Модель User. Поля - id, name, email
И таблица posts - Модель Post. Поля - id, user_id, title, content
Связь один ко многим.

Я получаю список юзеров и количество постов каждого юзера:
$users = DB::table('users')
            ->select('name', 'email')
            ->withCount('posts')
            ->get();


Подскажите, пожалуйста, как заменить метод withCount('posts') на ->select(DB::raw('count())) ? Я не смог найти в сети пример, так как везде все ищут через withCount, а мне хотелось бы понять как можно посчитать это значение через row sql.
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 1
@timmy88
это придется использовать левое соединение
->select(['users.id', DB::raw('count(posts.id) as posts_count'])->leftJoin('posts', 'users.id', '=', 'posts.user')->groupBy('users.id')

А если чтобы красиво вдруг нет постов у человека
->select(['users.id', DB::raw('IFNULL(count(posts.id), 0) as posts_count'])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы