php - getall - Ordenar por varias columnas con Doctrine
order by findall doctrine (3)
Debe agregar la dirección de la orden justo después del nombre de la columna:
$qb->orderBy(''column1 ASC, column2 DESC'');
Como ha notado, varias llamadas para orderBy
no se acumulan , pero puede realizar varias llamadas a addOrderBy
:
$qb->addOrderBy(''column1'', ''ASC'')
->addOrderBy(''column2'', ''DESC'');
Necesito ordenar los datos por dos columnas (cuando las filas tienen valores diferentes para la columna número 1, ordene por ella, de lo contrario, ordene por columna número 2)
Estoy usando un QueryBuilder
para crear la consulta.
Si llamo al método orderBy
segunda vez, reemplaza cualquier ordenamiento previamente especificado.
Puedo pasar dos columnas como el primer parámetro:
->orderBy(''r.firstColumn, r.secondColumn'', ''DESC'');
Pero no puedo pasar dos instrucciones de pedido para el segundo parámetro, así que cuando ejecuto esta consulta la primera columna se ordena en una dirección ascendente y la segunda, descendiendo. Me gustaría usar descendente para ambos.
¿Hay alguna manera de hacer esto usando QueryBuilder
? ¿Necesito usar DQL?
En Doctrine 2.x no puede pasar múltiples órdenes usando doctrine ''orderBy'' o ''addOrderBy'' como en los ejemplos anteriores. Porque, automáticamente agrega el ''ASC'' al final del último nombre de columna cuando dejó el segundo parámetro en blanco, como en la función ''orderBy''.
Para un ejemplo ->orderBy(''a.fist_name ASC, a.last_name ASC'')
dará como resultado SQL algo como esto ''ORDER BY first_name ASC, last_name ASC ASC''. Entonces este es un error de sintaxis SQL. Simplemente porque el valor predeterminado de orderBy o addOrderBy es ''ASC''.
Para agregar varios pedidos por, necesita usar la función ''agregar''. Y será así.
->add(''orderBy'',''first_name ASC, last_name ASC'')
. Esto le dará el SQL con formato correcto.
Más información sobre la función add (). http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html#_add
Espero que esto ayude. ¡Aclamaciones!
puedes usar ->addOrderBy($sort, $order)
Agregar: Doctrine Querybuilder por cierto. a menudo usa modificaciones "especiales" de los métodos normales, vea select-addSelect
, where-andWhere-orWhere
, groupBy-addgroupBy
...