Как использовать Doctrine «пусто» в выражении?

В связи с этим ответом на вопрос о том, как проверить (не) существование связанных объектов, используя Doctrine's, is empty запрос , я пытаюсь использовать это в выражении Doctrine Expression, но Expr Class не имеет документального способа использования is empty . isNull не работает. Итак, я ищу выражение:

 // filter for e with no relatedEntities $qb->expr()->isEmpty('e.realatedEntities'); // filter for e with relatedEntities $qb->expr()->isNotEmpty('e.realatedEntities'); 

Итак, любые идеи по этому поводу?

SIZE Doctrine также не имеет эквивалента в Expr . Я что-то упускаю? На данный момент я манипулирую объектом запроса вместо того, чтобы возвращать выражение (в привязке фильтра формы Lexik для Symfony), но это только обходное решение.

Solutions Collecting From Web of "Как использовать Doctrine «пусто» в выражении?"

Поскольку операнды сравнительных выражений являются самими выражениями DQL, вы можете написать:

 $qb->expr()->gt('size(e.relatedEntities)', 0) 

Они преобразуются в DQL-строку в методе __toString() выражения, который в этом случае определяется как:

 $this->leftExpr . ' ' . $this->operator . ' ' . $this->rightExpr; 

Поэтому это должно привести к:

 "size(e.relatiedEntities) > 0" 

Дальнейшее чтение:

Поскольку $qb->expr() делает не что иное, как возвращать объекты Doctrine\ORM\Query\Expr вы можете взглянуть на классы этого пространства имен, если хотите получить информацию о построении более сложных выражений.