En Laravel, es posible ordenar registros en un orden específico utilizando orderByRaw
junto con una declaración CASE
. Esta técnica es ideal cuando necesitas ordenar registros en un orden personalizado que no sigue un orden alfabético o numérico estándar.
orderByRaw
para ordenar por un orden específico de estados
Al emplear orderByRaw
, puedes definir un orden específico de valores en una columna, ideal para casos donde los estados tienen un flujo o prioridad específico. Este método es compatible tanto con el Query Builder como con Eloquent en Laravel.
En el siguiente ejemplo, organizaremos los registros de la tabla your_table
en un orden específico de estados: Pending
, Inprogress
, Built
, Finished
, y Cancelled
. Usamos orderByRaw
y una declaración CASE
para definir el orden deseado.
$results = DB::table('your_table')
->orderByRaw("CASE status
WHEN 'Pending' THEN 1
WHEN 'Inprogress' THEN 2
WHEN 'Built' THEN 3
WHEN 'Finished' THEN 4
WHEN 'Cancelled' THEN 5
END")
->get();
En este código:
orderByRaw
permite ejecutar una instrucción SQL en crudo.
CASE
asigna un valor numérico a cada estado, indicando el orden en que deben aparecer los registros.
Si estás trabajando con un modelo de Eloquent, puedes aplicar la misma lógica:
$results = YourModel::orderByRaw("CASE status
WHEN 'Pending' THEN 1
WHEN 'Inprogress' THEN 2
WHEN 'Built' THEN 3
WHEN 'Finished' THEN 4
WHEN 'Cancelled' THEN 5
END")
->get();
Esta instrucción funciona con cualquier consulta en Eloquent o Query Builder y permite personalizar la disposición de los resultados según los valores que definas en CASE
.
Para más información sobre orderByRaw
y el uso de Query Builder en Laravel, visita la documentación oficial de Laravel.
Jorge García
Fullstack developer