【问题标题】:How to change order of commands in doctrine Criteria如何更改学说标准中的命令顺序
【发布时间】:2015-01-02 19:36:28
【问题描述】:

这就是我使用标准的方式:

$criteria = Criteria::create();
$criteria->andWhere($criteria->expr()->eq('author', /**/));
$criteria->orWhere($criteria->expr()->eq('author', /**/));
$criteria->orWhere($criteria->expr()->eq('author', /**/));

这会导致这个 sql 命令:

WHERE 

      (
        (
          t0.author_id = ? 
          OR t0.author_id = ?
        ) 
        OR t0.author_id = ?
      ) 

如果我需要这个怎么办?

WHERE 

      (
        (
          t0.author_id = ? 
          OR t0.author_id = ?
          OR t0.author_id = ?
        )
      ) 

有什么办法可以改变括号的关联吗?

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    试试这个:

    $criteria = Criteria::create();
    $criteria->andWhere(
        $criteria->expr()->orX(
            $criteria->expr()->eq('author', /**/),
            $criteria->expr()->eq('author', /**/),
            $criteria->expr()->eq('author', /**/)
        )
    );
    

    【讨论】:

    • 谢谢。有什么办法可以找到标准是否找到任何东西?据我所知,他们根本不过滤任何东西,就像如果他们没有找到匹配项,他们就不会工作。
    • 我不是 Criteria 方面的专家,但在查询中,我想我会使用左连接,测试结果是否为空...
    • 我有小问题。我需要生成这样的内部表达式: foreach($filter->getFilterAuthors() as $author) { $criteria->expr()->eq('author', $author);这不适用于需要参数的 orX() 函数。
    • 看看这个答案:stackoverflow.com/questions/11704447/…。使用第一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多