【问题标题】:Sort Collection By id set按 id 集排序集合
【发布时间】: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() 是一个函数 php for sortby desc on array
  • 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


【解决方案1】:
$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

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2014-01-16
    • 2021-09-23
    • 1970-01-01
    • 2016-07-10
    相关资源
    最近更新 更多