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