按LENGTH排序

时间:2013-10-03 10:54:41

标签: php sql symfony doctrine-orm

在Symfony 1.4和Doctrine 1.2中,我可以:

$bodies = Doctrine::getTable('Body')->createQuery('b')
                        ->where('b.visible = 1')
                        ->orderBy('LENGTH(b.title) ASC')
                        ->execute();

然后正常工作。

在Symfony 2和Doctrine 2中我有:

$bodies = $this->getDoctrine()
                  ->getRepository('MainBodyBundle:Body')
                  ->createQueryBuilder('b')
                  ->where('b.visible = 1')
                  ->orderBy('LENGTH(b.title)', 'ASC')
                  ->getQuery()
                  ->getResults();

但这不起作用,我有错误:

  

在渲染模板期间抛出了异常   (“[语法错误]第0行,第114行:错误:字符串的预期结束,得到   “MainBodyBundle :: index.html.twig”中的'('“)。

2 个答案:

答案 0 :(得分:1)

如果您想按字符串长度排序,您应该在select:

中使用LENGTH函数
 $bodies = $this->getDoctrine()
                  ->getRepository('MainBodyBundle:Body')
                  ->createQueryBuilder('b')
                  ->select('b,LENGTH(b.title) lgth')
                  ->where('b.visible = 1')
                  ->orderBy('lgth', 'ASC')
                  ->getQuery()
                  ->getResults();

答案 1 :(得分:0)

这种情况下的错误似乎是语法错误,来自twig文件而不是存储库或控制器。所以我认为您应首先检查index.html.twig是否存在语法错误,而不是检查查询。