Мне нужно подсчитать результаты подзапроса отношения «многие ко многим».
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, чтобы выбрать определенные столбцы из отношения, поэтому мне нужно, чтобы мой первый вариант заработал.
Большое спасибо!






когда вы используете метод 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()
Большое спасибо! Это помогло!
Похоже, что вы, в первую очередь, не вернули бы какие-либо поля в таблице
usersв результате запроса. то есть возвращает толькоusers_count. Разве это не нормальное поведениеwithCount()?