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

文字列の長さで並べ替える場合は、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();
于 2013-10-03T11:27:14.647 に答える
0

この場合のエラーは構文エラーのようで、リポジトリやコントローラーではなく twig ファイルから発生しています。したがって、クエリをチェックするのではなく、最初に index.html.twig の構文エラーをチェックする必要があると思います。

于 2013-10-03T11:54:31.793 に答える