我需要两列命令数据时(当行具有对列号1,为了通过它不同的值;否则,为了通过列号2)
我使用QueryBuilder
创建查询。
如果我调用orderBy
方法的第二次,它取代了以前指定的任何排序。
我可以通过两列作为第一个参数:
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
但我不能传递两个方向排序为第二个参数,所以,当我执行此查询的第一列是在上升的方向,第二个,降有序。 我想用降对他们俩的。
有没有办法做到这一点使用QueryBuilder
? 我是否需要使用DQL?
你有列名之后的顺序方向地址:
$qb->orderBy('column1 ASC, column2 DESC');
正如你所指出的那样,多次调用orderBy
不叠加 ,但你可以在多个电话addOrderBy
:
$qb->addOrderBy('column1', 'ASC')
->addOrderBy('column2', 'DESC');
在教义2.X你无法通过使用教义“ORDERBY”或“addOrderBy”如上述例子传递多个顺序。 因为,它会自动当你离开的第二个参数为空,如在“排序依据”功能中增加“ASC”在最后一列名的末尾。
举一个例子->orderBy('a.fist_name ASC, a.last_name ASC')
将输出SQL这样的事情'ORDER BY FIRST_NAME ASC,姓氏ASC ASC'。 因此,这是SQL语法错误。 很简单,因为在排序依据或addOrderBy的默认值是“ASC”。
要通过你需要使用“添加”功能的添加多个订单。 这将是这个样子。
->add('orderBy','first_name ASC, last_name ASC')
这会给你正确的格式SQL。
在add()函数更多信息。 https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api
希望这可以帮助。 干杯!
你可以使用->addOrderBy($sort, $order)
地址:学说QueryBuilder的BTW。 经常使用的常规方法“特殊”的修改,请select-addSelect
, where-andWhere-orWhere
, groupBy-addgroupBy
...
为评论orderBy
源代码的注释: Keys are field and values are the order, being either ASC or DESC.
。 所以,你可以做orderBy->(['field' => Criteria::ASC])