Вы пробовали:
'SELECT p FROM Product p WHERE SIZE(p.reservations) < p.nr_of_bookings'
РЕДАКТИРОВАТЬ: выше для Doctrine 2. Для Doctrine 1.2, глядя на ваш код, я предполагаю, что ваше предложение HAVING
ссылается на что-то, что не входит в группу или результат агрегатной функции. Попробуйте что-то вроде этого:
$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');
Вы группируете по p.id
, поэтому SUM(p.nr_of_bookings)
будет равно p.nr_bookings
.
Из документации MySQL:
Стандарт SQL не позволяет предложению HAVING именовать столбцы, не найденные в предложении GROUP BY, если они не включены в агрегатную функцию.