Symfony createQueryBuilder, как использовать ‘и’ / ‘andx’ внутри ‘orx’

Есть ли лучший способ построить сложный запрос в Symfony 2?
Мой реальный запрос довольно сложный, но его можно упростить до чего-то вроде «A и ((B и C) или (B и D))» (я знаю математическое уравнение как «A и B и (C или D)», но мой реальный запрос не может быть упрощен).
У меня есть опыт использования andWhere и orX, но мой вопрос был в том, как использовать ‘и’ / ‘expr () -> andX’ внутри ‘orX’.

Пример ниже (Вопрос был о частях псевдокода внутри orX):

$qBuilder = $repo->createQueryBuilder('s')
->select('s.id')
->Where('s.FirstName = :fname')
->Where('s.LastName = :lname')
->andWhere($qBuilder->expr()->orX(
(':email is not empty AND s.Email = :email'),
(':phone is not empty AND s.HomePhone = :phone ),
(':phone is not empty AND s.StudentMobile = :phone ),
(':mphone is not empty AND s.HomePhone = :mphone),
(':mphone is not empty AND s.StudentMobile = :mphone)
))
->setParameter('fname', strtolower($fname))
->setParameter('lname', strtolower($lname))
->setParameter('email', $email)
->setParameter('phone', $phoneNumber)
->setParameter('mphone', $studentmobile);

0

Решение

Просто сделай andX() expr внутри. Все функции выражения являются вложенными

->andWhere($qb->expr()->orX(
$qb->expr()->andX(':email is not empty', 's.Email = :email'),
$qb->expr()->andX(':phone is not empty', 's.HomePhone = :phone'),
$qb->expr()->andX(':phone is not empty', 's.StudentMobile = :phone'),
$qb->expr()->andX(':mphone is not empty', 's.HomePhone = :mphone'),
$qb->expr()->andX(':mphone is not empty', 's.StudentMobile = :mphone')
))
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]