2017-01-30 4 views
0

Связано с this answer on how to check for the (non)existance of related entities using Doctrine's is empty query, я пытаюсь использовать это в выражении Doctrine, но Expr Class не имеет документального способа использования is empty. isNull не работает. Так что я ищу выражение:Как использовать Doctrine «is empty» в выражении?

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

Значит, любые идеи по этому вопросу?

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

ответ

2

Как операндов comparison expressions являются 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, вы можете взглянуть на классы этого пространства имен, если хотите получить информацию о построении более сложных выражений.