我将Symfony2与Doctrine 2结合使用,并为Symfony 2的Pagerfanta Bundle创建查询。
查询如下:
$qb = $this->createQueryBuilder('t')
->select()
->join('t.pois', 'p');
$qb->groupBy('t.id');
$qb->addOrderBy('count(case when p.image = 1 then 1 else null end)', 'DESC');
它将给出以下查询:
SELECT t FROM Bundle\Entity\Turn t INNER JOIN t.pois p GROUP BY t.id ORDER BY count(case when p.image = 1 then 1 else null end) DESC
我还首先创建了一个MySQL查询,以便可以在Doctrine 2中重建它,如下所示:
SELECT *
FROM `turn`
LEFT JOIN (
poi
) ON ( turn.id = poi.turn_id )
GROUP BY turn.id
ORDER BY count( case when poi.image = 1 then 1 else null end) DESC;
这个本地查询工作得很好,已经在phpmyadmin中测试过。
但是“教义2”查询抛出了以下例外:
Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("[Syntax Error] line 0, col 115: Error: Expected end of string, got '('") in Bundle:Admin:showTurnsFiltered.html.twig at line 64.
QueryException: [Syntax Error] line 0, col 115: Error: Expected end of string, got '('
我究竟做错了什么?还是Pagerfanta捆绑软件无法使用此查询?
最佳答案
我通过在turn
实体(count_poi
)中添加一列并通过本机SQL对其进行填充来解决此问题。
之后,查询如下:
SELECT *
FROM `turn`
ORDER BY t.count_poi DESC;
但是这只是一个解决方法,我对此不满意,但目前可以使用