如何在Doctrine中按特定值排序记录?

时间:2013-09-20 14:07:16

标签: php zend-framework doctrine-orm sql-order-by dql

我正在使用以下查询来检索所有关键字记录,其中包含属于首先出现id = 2的组记录的关键字记录。这似乎工作正常。

 SELECT k.*, g.groupid, kg.keywordid
  FROM keywords k
  JOIN keywords_groups kg ON k.keywordid=kg.keywordid
  JOIN groups g ON kg.groupid=g.groupid
 ORDER BY kg.groupid = 2 DESC;

但是我试图将其转换为DQL,但不断收到以下错误:

[Syntax Error] line 0, col 198: Error: Expected end of string, got '='

我的DQL中似乎有问题的一行是:

->orderBy($keywordQB->expr()->eq('g.groupid', ':keyword_group_id'), 'ASC')

在我看来,Doctrine不支持这一点,我想不出在DQL中这样做的替代方法。

感谢帮助。

1 个答案:

答案 0 :(得分:0)

学说支持这一点。试试这个

$query = Doctrine_Query::create()
                ->select('k.*, g.groupid, kg.keywordid')
                ->from('keywords k')
                ->innerJoin('keywordsGroups kg ON k.keywordid=kg.keywordid')
                ->innerJoin('Groups g ON kg.groupid=g.groupid')
                ->orderBy('kg.groupid = 2 DESC');
        $result = $query->execute(array(), Doctrine::HYDRATE_ARRAY);
        return $result;