Laravel withCount () возвращает ноль

Мне нужно подсчитать результаты подзапроса отношения «многие ко многим».

return $q->withCount(['users' => function($q) {
    $q->select("Users.Id as Id_user","Users.Name");
}])->get()

Этот код не работает. Он возвращает null.

Однако это работает нормально и успешно добавляет столбец users_count:

return $q->withCount(['users'])->get();

Но мне нужно сделать подзапрос select, чтобы выбрать определенные столбцы из отношения, поэтому мне нужно, чтобы мой первый вариант заработал.

Большое спасибо!

Похоже, что вы, в первую очередь, не вернули бы какие-либо поля в таблице users в результате запроса. то есть возвращает только users_count. Разве это не нормальное поведение withCount()?

Oluwatobi Samuel Omisakin 08.11.2018 09:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
1 712
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

когда вы используете метод Count или withCount, построитель запросов выполняет select count(id) as aggregate

если в параметре условия withCount вы переопределяете часть select. это нарушает

return $q->withCount(['users' => function($q) {
    //here you are supposed to do condition, not a select
    $q->select("Users.Id as Id_user","Users.Name");
}])->get()

если вам нужен идентификатор и имя пользователя, используйте with

return $q->withCount(['users'])
    ->with(['users' => function($q) {
        $q->select("Users.Id as Id_user","Users.Name");
    }])
    ->get()

Большое спасибо! Это помогло!

Viktor 08.11.2018 21:29

Другие вопросы по теме