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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top