0

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);
4

1 に答える 1

2

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')
))
于 2015-11-06T19:17:09.067 に答える