Volver a la página principal
lunes 28 octubre 2024
10

Ordenar registros por un orden específico de estados en Laravel

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.

Cómo utilizar 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.

Ejemplo en Query Builder

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.

Ejemplo en Eloquent

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.

Referencias

Para más información sobre orderByRaw y el uso de Query Builder en Laravel, visita la documentación oficial de Laravel.

Etiquetas:
laravel php
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer