Symfony 2 で複雑なクエリを構築するより良い方法はありますか? 私の実際のクエリは非常に複雑ですが、「A and ((B and C) or (B and D))」のようなものに単純化できます (数式は「A and B and (C or D)」と知っていますが、私の実際のクエリは単純化できません)。andWhere と orX を使用した経験がありますが、私の質問は、「orX」内で「and」/「expr()->andX」を使用する方法でした。
以下の例 (質問は 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);