我有一个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的间接修改无效
答案 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
。