Symfony2主义自定义函数

时间:2013-07-11 14:29:34

标签: symfony doctrine-orm

您好我想在教条中添加自定义函数。

我需要添加一个mysql Field 函数,以便按照这里的大小排序: mysql custom order by with mixed data types

所以我用它作为例子:https://github.com/beberlei/DoctrineExtensions/blob/master/lib/DoctrineExtensions/Query/Mysql/Field.php

并尝试将其添加到Symfony2中:http://symfony.com/fr/doc/current/cookbook/doctrine/custom_dql_functions.html

当我这样做时:

$queryBuilder->addOrderBy("FIELD(size, 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL'), size, length", 'ASC');

我总是得到错误: Error: Expected end of string, got '('

知道如何实现它吗?

1 个答案:

答案 0 :(得分:1)

您不能在ORDER BY子句中使用DQL函数。您必须将FIELD()函数的结果选择到隐藏字段中,并使用该字段对结果进行排序:

 SELECT ..., FIELD(size, ...) AS HIDDEN sizeOrder
 FROM ...
 ORDER BY sizeOrder

sizeOrder字段不会影响您的结果,因为它甚至不会被水合。