我正在尝试在DQL中执行类似于此SQL的操作
SELECT * FROM TBL
WHERE (something = foo AND something2 = foo2)
OR (something3 = foo3 AND something4 = foo4)我得到了这个似乎是有效的,但我严重怀疑它;你认为呢?
->where('something = :foo')
->setParameter('foo', $fooValue)
->andWhere('something2 = :foo2')
->setParameter('foo2', $fooValue2)
->orWhere('something3 = :foo3')
->setParameter('foo3', $fooValue3)
->andWhere('something4 = :foo4')
->setParameter('foo4', $fooValue4)
->getQuery()
->getArrayResult()发布于 2018-09-12 13:59:52
您的怀疑是正确的,并且您可能会在当前代码中面临运算符优先级问题,要使用原理中的分组条件编写等价查询,您可以编写以下代码
->where(
$qb->expr()->orX(
$qb->expr()->andX(
$qb->expr()->eq('something', ':foo'),
$qb->expr()->eq('something2', ':foo2')
),
$qb->expr()->andX(
$qb->expr()->eq('something3', ':foo3'),
$qb->expr()->eq('something4', ':foo4')
)
)
)
->setParameter('foo', $fooValue)
->setParameter('foo2', $fooValue2)
->setParameter('foo3', $fooValue3)
->setParameter('foo4', $fooValue4)
->getQuery()
->getArrayResult();Doctrine Query Builder nested orX and andX conditions with join
发布于 2018-09-04 23:15:45
您可以使用$em->createQuery方法
$query = $em->createQuery('SELECT t FROM Tbl t WHERE (t.something = :foo AND t.something2 = :foo2) OR (t.something3 = :foo3 AND t.something4 = :foo4)');
$query->setParameter(...);
$result = $query->getResult();https://stackoverflow.com/questions/52137256
复制相似问题