【发布时间】:2019-05-26 12:18:32
【问题描述】:
我有一个 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 在 cmets 中建议的内容,我将代码更改为:
$items = Items::get()->sortBy(function($model) use ($suppliersOrder) {
return rsort($model->supplier_id, $suppliersOrder);
});
间接修改重载属性 App\Item::$supplier_id 无效
【问题讨论】:
-
删除
array_search并尝试rsort()是一个函数phpfor sortby desc onarray -
return rsort($model->supplier_id, $suppliersOrder) 给我“间接修改重载属性 App\Item::supplier_id 无效” -
你有一个
example结果你想要什么。 -
我想通过给定的 id 数组(作为模型的供应商 ID 列)订购我的收藏。按
model->supplier_id订购为 [8,7,5,1,3,4] - 不是 [1,3,4,5,7,8] 或 [8,7,5,4,3,1] 我'会使用sortBy('supplier_id'); -
尝试删除属性
->values()
标签: laravel laravel-5 eloquent laravel-collection