按ID集对集合进行排序

时间:2018-12-28 17:57:45

标签: laravel laravel-5 eloquent laravel-collection

我有一个ID数组,我想通过它们对集合中的给定列进行排序。

例如,

$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'),以便获得所需的订单。


Alexander Villalobos在评论中提出的建议,我更改了代码,如下所示:

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

对重载属性App \ Item :: $ supplier_id的间接修改无效

1 个答案:

答案 0 :(得分:2)

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

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

这应该使您按照$suppliersOrder中所述的顺序对项目进行排序。根据{{​​3}},回调函数的参数包括一个为集合的row和另一个为集合中该行的key