Doctrina - filtrar por valor agregado extranjero
-
10-07-2019 - |
Pregunta
¿cómo puedo usar el resultado de la función Agregate en where in Doctrine?
Por ejemplo, quiero conocer al usuario con muchos números tontos.
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
¿Cómo puedo acceder a users_phonenumber_count en dónde en Dql?
Solución
Necesitas usar HAVING, no DONDE. Además, debe agrupar por algo que está realmente en su consulta, en este caso u.name. Asumiendo que u.name es único; de lo contrario, debe agrupar por u.id y 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
Otros consejos
No puedo recordar detalles exactos de cómo hice esto, pero recuerda que tenía que usar " HAVING "
Esto se debe a la forma en que funciona SQL, no específicamente a la doctrina: DONDE no se pueden comparar los valores calculados, se debe usar tener (o se puede hacer WHERE COUNT (algo) < algo)