TransWikia.com

¿Cómo hacer un order by sobre una columna cuyo tipo de dato es enum?

Stack Overflow en español Asked by DAD on December 7, 2021

Tengo una tabla llamada proyectos
la cual tiene las siguientes columnas :

  • nombre
  • estado = [activo, inactivo, cerrado]
  • fecha_created
  • fecha_updated
  • c_users (fk_usuario)

lo que quiero conseguir es que me obtenga los proyectos según el estado y de forma descendente fecha_created, entonces hice esto:

$consulta = DB::table('proyecto')->where('c_users',Auth::user()->id)->orderBy('estado')->orderBy('fecha_created','desc')->get();

la consulta me soluciona el problema de forma orderBy('fecha_created','desc') pero el problema es con orderBy('estado') que genera, pero tal cual como lo guarde en el migrate : activo , inactivo , cerrado.

pero quisiera que me muestre de la siguiente forma:
activos cerrados inactivos

como podría generar de la forma que quiero según el estado ?

One Answer

Si nos basamos en la documentación de MySQL, indica que las mejores formas de hacer un ordenamiento sobre una columna de tipo ENUM son:

  • Ingresa los valores en la columna en orden alfabético
  • Asegúrate de que el ordenamiento sea léxico en lugar de su índice llevando a cabo un cast de los valores

Ejemplo tomado de la documentación oficial1

ORDER BY CAST(col AS CHAR) or ORDER BY CONCAT(col).

Para este caso cómo estás en Laravel deberás usar el método

orderByRaw(......)

Y componer el cast dentro de este método

Referencia

Answered by BetaM on December 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP