Laravel порядокНе сортировка данных в правильном порядке - PullRequest
0 голосов
/ 14 марта 2020

У меня есть таблица buildings со столбцом с именем building_number. Это может иметь такие значения, как 1, 2, 10, A, B. Теперь я хочу заказать его следующим образом:

1
2
10
A
B

И я попробовал следующий код:

$res = \DB::table('buildings')
       ->where('property_id',$id)
       ->orderByRaw('CAST(building_number as UNSIGNED)') 
       ->orderBy('building_number','asc')
       ->pluck('building_number');
Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [0] => A
            [1] => B
            [2] => 1
            [3] => 2
            [4] => 10
        )
)

Если я удалил ->orderByRaw('CAST(building_number as UNSIGNED)') эту строку, порядок результат будет:

Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [0] => 1
            [1] => 10
            [2] => 2
            [3] => A
            [4] => B
        )
)

1 Ответ

0 голосов
/ 14 марта 2020

Вы получаете этот результат, потому что ваш столбец building_number в вашей таблице имеет тип varchar

, который содержит все letters и numbers, поэтому он смотрит на первый символ в каждой строке и сортирует ее

Чтобы решить эту проблему, вы можете попробовать сортировку alphanumeri c.

$res = \DB::table('buildings')
            ->where('property_id',$id)
            ->orderByRaw('LENGTH(building_number)','asc')
            ->orderBy('building_number','asc')
            ->pluck('building_number');

ИЛИ

вы можно запросить данные без заказа, а затем использовать это.

$sorted = $res->sortBy('building_number'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...