Solución:
Se le plantea el problema de ordenar elementos alfanuméricamente, o en términos de informática, clasificación natural.
Hay muchas formas de lograr una ordenación natural con MySQL directo, pero también puede tomar los resultados de su ayudante de Laravel en formato de matriz e implementar PHP natsort
función en su lugar.
De los métodos que encontré anteriormente, obtuve la mejor manera que probablemente resolvería su problema con el código de ejemplo:
DB::table('test')->orderBy('LENGTH(title)', 'ASC')
->orderBy('title', 'ASC')
->get();
sin embargo, no estoy seguro de si el ayudante se quejará de recibir una función MySQL en lugar de un nombre de columna directo en el orderBy
función. También estoy transcribiendo las referencias que utilicé en combinación con su ejemplo; no puedo garantizar la eficacia.
Para Laravel esto también funciona:
$collection = $collection->sortBy('order', SORT_REGULAR, true);
Puede que sea tarde, pero a otros les puede ayudar.
Según el enlace anterior que encontré a continuación, obtuve la mejor manera que probablemente resolvería su problema con el código de ejemplo: https://www.electrictoolbox.com/mysql-order-string-as-int/
Consulta
SELECT * FROM <table> ORDER BY CAST(<column> AS unsigned)
Ejemplo para laravel
DB::table('test')
->orderByRaw("CAST(title as UNSIGNED) ASC")
->get();