2013-07-17 1 views
3

Как я могу получить «естественный порядок» в «Красноречивом ОРМ»? В таблице у меня есть столбец «текст» (строка).
Нормальный порядок: Модель :: OrderBy ('текст')Природный ЗАКАЗ в Красноречивой ОРМ, Laravel 4

'value 1' 
'value 12' 
'value 23' 
'value 3' 
'value 8' 

мне это нужно:

'value 1' 
'value 3' 
'value 8' 
'value 12' 
'value 23' 

Любые идеи?

ответ

6

Вы можете добавить сырой запрос и сделать что-то вроде этого:

Model::orderBy(DB::raw('LENGTH(text), text')); 
+0

Nice. что означают два текста? один ссылается на имя строки, а другой? –

1

Для Laravel это также работает:

$collection = $collection->sortBy('order', SORT_NATURAL, true); 
+0

Я не понял, что sortBy принял второй (или третий) параметр. Это помогло исправить мою сортировку коллекции Laravel 5.2. Документация Laravel не показывает это как вариант (https://laravel.com/docs/5.2/collections#method-sortby), хотя функция sortBy в файле Collection.php показывает, что он использует SORT_REGULAR в качестве второго параметра по умолчанию (что имело смысл в ретроспективе). Я закончил с: Item :: where ($ itemQueryArray) -> с ($ modelName) -> get() -> sortBy ($ sortText, SORT_STRING | SORT_FLAG_CASE); –