0

在 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”中得到 '('")。

4

2 回答 2

2

如果您想按字符串长度排序,您应该在选择中使用 LENGTH 函数:

 $bodies = $this->getDoctrine()
                  ->getRepository('MainBodyBundle:Body')
                  ->createQueryBuilder('b')
                  ->select('b,LENGTH(b.title) lgth')
                  ->where('b.visible = 1')
                  ->orderBy('lgth', 'ASC')
                  ->getQuery()
                  ->getResults();
于 2013-10-03T11:27:14.647 回答
0

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

于 2013-10-03T11:54:31.793 回答