Answers:
您必须在列名称后添加订单方向:
$qb->orderBy('column1 ASC, column2 DESC');
如前所述,多个调用orderBy
不会叠加,但是您可以对进行多次调用addOrderBy
:
$qb->addOrderBy('column1', 'ASC')
->addOrderBy('column2', 'DESC');
alias.column_name
。
在Doctrine 2.x中,您不能使用上面示例中的教义“ orderBy”或“ addOrderBy”传递多个订单。因为,当您将第二个参数保留为空白时(例如在“ orderBy”函数中),它会自动在最后一列名称的末尾添加“ ASC”。
例如,->orderBy('a.fist_name ASC, a.last_name ASC')
将输出类似“ ORDER BY first_name ASC,last_name ASC ASC”的SQL。因此,这是SQL语法错误。仅仅是因为orderBy或addOrderBy的默认值为'ASC'。
要添加多个订单,您需要使用“添加”功能。它将是这样。
->add('orderBy','first_name ASC, last_name ASC')
。这将为您提供正确格式的SQL。
有关add()函数的更多信息。https://www.doctrine-project.org/projects/doctrine-orm/zh/2.6/reference/query-builder.html#low-level-api
希望这可以帮助。干杯!
对于注释orderBy
的源代码注释:Keys are field and values are the order, being either ASC or DESC.
。这样就可以了orderBy->(['field' => Criteria::ASC])
。
该orderBy
方法需要两个字符串或一个Expr\OrderBy
对象。如果要添加多个订单声明,则正确的addOrderBy
方法是使用method或实例化一个OrderBy
对象并相应地填充它:
# Inside a Repository method:
$myResults = $this->createQueryBuilder('a')
->addOrderBy('a.column1', 'ASC')
->addOrderBy('a.column2', 'ASC')
->addOrderBy('a.column3', 'DESC')
;
# Or, using a OrderBy object:
$orderBy = new OrderBy('a.column1', 'ASC');
$orderBy->add('a.column2', 'ASC');
$orderBy->add('a.column3', 'DESC');
$myResults = $this->createQueryBuilder('a')
->orderBy($orderBy)
;