在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”中的'('“)。
答案 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是否存在语法错误,而不是检查查询。