Сортировать коллекцию по идентификатору - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть массив идентификаторов, по которым я хочу отсортировать данный столбец по ним в коллекции.

Например,

$suppliersOrder = [8,7,5,1,3,4];

$items = Items::get()->sortBy(function($model) use ($suppliersOrder) {
   return array_search($model->supplier_id, $suppliersOrder);
})->values();

Это действует как порядок элементов как [1,3,4,5,7,8]вместо данного заказа.И если я попробую sortByDesc, аналогично [8,7,5,4,3,1], но я не смог найти способ на самом деле отсортировать их по порядку моего массива.

Моя конечная цель - запустить $items->groupBy('supplier.name'), чтобы я мог получить желаемоеorder.


Что Александр Вильялобос предложил в комментариях, я изменил свой код следующим образом:

$items = Items::get()->sortBy(function($model) use ($suppliersOrder) {
   return rsort($model->supplier_id, $suppliersOrder);
});

Косвенное изменение перегруженного свойства App \ Item :: $ supplier_idне имеет эффекта

1 Ответ

0 голосов
/ 28 декабря 2018
$suppliersOrder = [8,7,5,1,3,4];

$items = Items::get()->sortBy(function($row,$key) use ($suppliersOrder) {
   return array_search($row->supplier_id, $suppliersOrder);
});

Это должно дать вам отсортированную коллекцию предметов в порядке, который вы описали в $suppliersOrder.Согласно Laravel docs , параметры для функции обратного вызова включают в себя один, являющийся row для коллекции, а другой - key этой строки в коллекции.

...