Recuperando registros que tienen un número mínimo de registros relacionados
-
26-09-2019 - |
Pregunta
Hay una-2-muchos relación entre la propiedad y Reserva. La propiedad tiene columna llamada '' nr_of_bookings. NECESITO DQL que va a recuperar sólo las propiedades que tiene COUNT (Reserva) menos de Property.nr_of_bookins.
Un ejemplo: Un poco de la propiedad tiene nr_of_bookings = 3. Si tiene 5 Reservas relacionados, no va a ser recuperado. Pero si tiene 2 Reservas relacionados, será recuperado.
He intentado numerosas combinaciones, pero echo de menos algo Obviosly. He publicado pregunta similar aquí , pero es mejor empezar desde cero . Gracias.
Solución
¿Usted ha intentado:
'SELECT p FROM Product p WHERE SIZE(p.reservations) < p.nr_of_bookings'
EDIT: Lo anterior es para la Doctrina 2. Para Doctrina 1.2, mirando a su código, supongo que su cláusula de HAVING
hace referencia a algo que no está en un grupo por o el resultado de una función agregada. Intentar algo como esto:
$q = PropertyTable::getInstance()
->createQuery('p')
->select('p.*, COUNT(r.id) as num_of_reservations, SUM(p.nr_of_bookings) as num_bookings')
->leftJoin('p.Reservation r')
->groupBy('p.id')
->having('num_of_reservations < num_bookings');
Esta agrupación por p.id
por lo SUM(p.nr_of_bookings)
será igual a p.nr_bookings
.
A partir de la documentación de MySQL:
El estándar SQL no permite la cláusula HAVING para nombrar cualquier columna no se encuentra en la cláusula GROUP BY, si no está encerrado en una función de agregado.