按学说排列多列
我需要按两列对数据进行sorting(当列号1的行有不同的值时,按顺序排列;否则按列2sorting)
我正在使用QueryBuilder
来创build查询。
如果我再次调用orderBy
方法,它会replace以前指定的任何顺序。
我可以传递两列作为第一个参数:
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
但是我不能为第二个parameter passing两个sorting方向,所以当我执行这个查询时,第一列按升序排列,第二列按降序排列。 我想用他们两个降序。
有没有办法使用QueryBuilder
做到这QueryBuilder
? 我需要使用DQL吗?
您必须在列名后面添加订单方向:
$qb->orderBy('column1 ASC, column2 DESC');
如您addOrderBy
,多次调用orderBy
不会堆栈 ,但可以多次调用addOrderBy
:
$qb->addOrderBy('column1', 'ASC') ->addOrderBy('column2', 'DESC');
在Doctrine 2.x中,不能像上面的例子那样通过使用doctrine'orderBy'或'addOrderBy'来传递多个命令。 因为,当您将第二个参数留空时,例如在“orderBy”函数中,会自动将“ASC”添加到最后一个列名的末尾。
例如->orderBy('a.fist_name ASC, a.last_name ASC')
将会输出如下所示的->orderBy('a.fist_name ASC, a.last_name ASC')
BY first_name ASC,last_name ASC ASC'。 所以这是SQL语法错误。 只是因为orderBy或addOrderBy的默认值是'ASC'。
要添加多个订单,您需要使用“添加”function。 这将是这样的。
->add('orderBy','first_name ASC, last_name ASC')
。 这会给你正确格式化的SQL。
有关add()函数的更多信息。 http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html#_add
希望这可以帮助。 干杯!
你可以使用 – > addOrderBy($ sort,$ order)
Add:Doctrine Querybuilder btw。 通常使用正常方法的“特殊”修改,请参阅select-addSelect,where-andWhere-orWhere,groupBy-addgroupBy ..