Symfony createQueryBuilder,如何在 'orx' 中使用 'and'/'andx'
Symfony createQueryBuilder, how use 'and'/'andx' inside 'orx'
在 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);
简单地在里面做一个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')
))
在 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);
简单地在里面做一个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')
))