Доктрина - фильтр по иностранной совокупной стоимости
-
10-07-2019 - |
Вопрос
как я могу использовать результат функции Agregate и где в Doctrine?
Например, я хочу знать пользователя с глупыми номерами.
SELECT u.name, COUNT(p.id) AS users_phonenumber_count
FROM users u
INNER JOIN phonenumbers p ON p.user_id = u.id
WHERE
users_phonenumber_count > 10
GROUP BY
u.id
Как я могу получить доступ к users_phonenumber_count в Dql?
Решение
Вам нужно использовать HAVING, а не ГДЕ. Кроме того, вам нужно сгруппировать что-то, что на самом деле в вашем запросе, в данном случае u.name. Предполагая, что u.name уникально - если нет, вам нужно сгруппировать по u.id и u.name.
SELECT u.name, COUNT(*) AS users_phonenumber_count
FROM users u
INNER JOIN phonenumbers p ON p.user_id = u.id
GROUP BY
u.name
HAVING
count(*) > 10
Другие советы
Я не могу вспомнить точные детали того, как я это сделал, но помните, что он должен был использовать " HAVING "
Это связано с тем, как работает SQL, а не с доктриной - ГДЕ не может сравнивать вычисленные значения, вы должны использовать наличие (или вы можете сделать ГДЕ СЧЕТ (что-то) < что-то)