有条件的 Doctrine ORDER BY

Doctrine ORDER BY with conditions

我在 Doctrine 中有以下内容:

$query = $this->_em
              ->createQuery("SELECT f
              FROM models\Food f 
              WHERE f.name LIKE :query 
              OR f.country LIKE :query
              OR f.code = :query_full
              ORDER BY f.code != :query_full, f.rank ASC")
              ->setParameters(
                  array(
                     "query" => "%$query%",
                      "query_full" => $query
               ));

查询在 MySQL Workbench 中有效,但 Doctrine 抛出异常:

 [Syntax Error] line 0, col 359: Error: Expected end of string, got '!'

如何在 Doctrine 中编写该查询?这个想法是,如果查询匹配它,总是在结果顶部有 f.code

您可以尝试几种方法:使用SQL、QueryBuilder、DQL... 除了原生的SQL,其余的都需要在[=19=上使用CASE语句] 查询的一部分。

按照您的方法,您的查询将是:

$query = $this->_em
              ->createQuery("SELECT f, (CASE WHEN (f.id != :query_full) THEN 1 ELSE 0 END) as myOrderBy
              FROM models\Food f 
              WHERE f.name LIKE :query 
              OR f.country LIKE :query
              OR f.code = :query_full
              ORDER BY myOrderBy ASC, f.rank ASC")
              ->setParameters(
                  array(
                     "query" => "%$query%",
                      "query_full" => $query
               ));

您必须将 ASC 或 DESC 和大小写设置为适合您的值。

应该可以。希望对你有帮助。