Получение записей, которые имеют минимальное количество связанных записей
-
26-09-2019 - |
Вопрос
Существует один-2-много отношения между имуществом и бронированием. Имущество имеет столбец под названием «NR_OF_Bookings». Мне нужен DQL, который извлечет только свойства, имеющие количество (бронирование) меньше, чем Property.nr_of_Bookins.
Пример: некоторое свойство имеет nr_of_bookings = 3. Если он имеет 5 бронирований, это не будет получено. Но если он имеет 2 смежных бронирования, он будет получен.
Я попробовал многочисленные комбинации, но я скучаю по поводу чего-то очевидно. Я разместил подобный вопросздесь , но лучше начать с нуля. Спасибо.
Решение
Ты пытался:
'SELECT p FROM Product p WHERE SIZE(p.reservations) < p.nr_of_bookings'
Редактировать: приведенное выше для доктрины 2. Для доктрины 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 Standard не позволяет получить предложение называть любые столбцы, не найденные в группе по предложению, если он не заключен в совокупную функцию.