首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则2-为Symfony 2- Pagerfanta按计数和连接排序

原则2-为Symfony 2- Pagerfanta按计数和连接排序
EN

Stack Overflow用户
提问于 2014-07-02 09:21:16
回答 1查看 483关注 0票数 0

我在Doctrine 2中使用Symfony2,并为Symfony 2创建了一个Pagerfanta查询。

查询如下:

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

它将提供以下查询:

代码语言:javascript
复制
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中重新构建它,如下所示:

代码语言:javascript
复制
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中进行了测试。

但是Doctrine 2查询抛出了这个表达式:

代码语言:javascript
复制
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包无法处理此查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-04 08:59:16

我通过向turn实体(count_poi)添加一个列并通过本机SQL填充来修正这个问题。

在此之后,查询如下:

代码语言:javascript
复制
SELECT *
FROM `turn`
ORDER BY t.count_poi DESC;

但这只是个解决办法,我对此不满意,但它现在起作用了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24527360

复制
相关文章

相似问题

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