0

嗨,我喜欢在教义中添加自定义功能。

我需要添加一个 mysql字段函数才能按大小排序,如下所示: 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 '('

知道如何实施吗?

4

1 回答 1

1

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

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

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

于 2013-07-11T14:35:53.797 回答