У меня есть Предложение от юридического лица. Оффер имеет отношение "многие-ко-многим" к файлам. Теперь я хочу получить все предложения, в которых есть файлы -> Count (offer.files)> 0.
Я пробовал вот так, но не работает:
$this->repository->createQueryBuilder('offer')
->addSelect('COUNT(offer.files) as files')
->having('files > 1')
->getQuery()
->getResult();






Вам необходимо внутреннее соединение с ассоциацией, а группа по - предложение корневого объекта:
->innerJoin('offer.files', 'files')
The INNER JOIN keyword selects records that have matching values in both tables.
Тогда ты можешь:
->addSelect('COUNT(files) as total')
->having('total > 1')
->groupBy('offer')
Если вам не нужна сумма в результате, вы можете определить ее как СКРЫТЫЙ, изменив первую строку выше как:
->addSelect('COUNT(files) as HIDDEN total')
Подробно о внутреннем соединенииПостроитель запросов Doctrine
На самом деле вам не нужно соединение. Для этого в Doctrine встроен SIZEФункция DQL.
SIZE(collection) - Return the number of elements in the specified collection
Таким образом, вы можете использовать это так:
$this->repository->createQueryBuilder('offer')
->addSelect('SIZE(offer.files) as files')
->having('files > 1')
->getQuery()
->getResult();