首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原理DQL WHERE (condition1和condition2) OR (condition3和condition4)

原理DQL WHERE (condition1和condition2) OR (condition3和condition4)
EN

Stack Overflow用户
提问于 2018-09-02 20:55:32
回答 2查看 73关注 0票数 1

我正在尝试在DQL中执行类似于此SQL的操作

代码语言:javascript
复制
SELECT * FROM TBL
WHERE (something = foo AND something2 = foo2) 
OR (something3 = foo3 AND something4 = foo4)

我得到了这个似乎是有效的,但我严重怀疑它;你认为呢?

代码语言:javascript
复制
->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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-12 13:59:52

您的怀疑是正确的,并且您可能会在当前代码中面临运算符优先级问题,要使用原理中的分组条件编写等价查询,您可以编写以下代码

代码语言:javascript
复制
->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

票数 0
EN

Stack Overflow用户

发布于 2018-09-04 23:15:45

您可以使用$em->createQuery方法

代码语言:javascript
复制
$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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52137256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档