Как сделать заказ по характеру и номеру в Laravel - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь упорядочить коллекцию по символам и числам в Laravel, я пробовал разные методы, но, кажется, ничто не работает так, как я хочу.

Числа, которые я пытаюсь заказать, могутвсегда разные, в примере кода ниже используются следующие символы и цифры:

M1,
M2,
M3,
M10,
M11,
R1,
R2,
R10,
R11

Символы + цифры хранятся в базе данных "MYSQL" с типом данных VARCHAR.

Triedэто:

$items = Item::where('item_id', $itemId)->orderBy('name', 'ASC')->get();
// M1, M10, M11, M2, M3, R1, R10, R11, R2

$items = Item::where('item_id', $itemId)->orderByRaw('LENGTH(name)', 'asc')->orderBy('name', 'ASC')->get();
// M1, M2, M3, R1, R2, M10, M11, R10, R11</i>

$items = Item::where('item_id', $itemId)->orderByRaw('CAST(name as unsigned)')->orderBy('name', 'ASC')->get();
// M1, M10, M11, M2, M3, R1, R10, R11, R2</i>

Я пытаюсь достичь следующего порядка:

M1,
M2,
M10,
M11,
R1,
R2,
R10,
R11

Возможно ли это вообще?

1 Ответ

1 голос
/ 28 октября 2019

Используйте sortBy() с флагом SORT_NATURAL.

$items = Item::where('item_id', $itemId)->get()->sortBy('name', SORT_NATURAL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...