为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel - Eloquent to Json,然后对 json 对象进行 sortBy

Laravel - Eloquent to Json,然后对 json 对象进行 sortBy

PHP
慕尼黑5688855 2023-06-24 15:44:50
我有这个 json 值,我想排序,但由于某种原因它不起作用。    [        {            "id": 15028,            "order_id": 342,                     "user_id": 3,            "status": "1",            "priority": "1",            "donedate": null,            "user": {                "id": 3,                "name": "Max"            }        },        {            "id": 15030,            "order_id": 341,                     "user_id": 4,            "status": "2",            "priority": "1",            "donedate": null,            "user": {                "id": 4,                "name": "Jon"            }        }    ]这个 json 结构是 Laravel 使用 $object->toJson(); 进行雄辩对象转换的结果;现在我将此输出保留在 Redis 缓存中。我想要的是,当任何订单的状态和/或优先级发生更改时,我想对这个 json 进行排序并将其存储回 Redis 中。$order_list = collect($json_decoded_with_updated_values);$order_list = $order_list->sortBy('status')->sortBy('priority');Redis::set(\GuzzleHttp\json_encode($stich_list_in_collection));Redis::set("orders_list", $orders_list, 302400);但是,我没有得到排序列表。我想要实现的是,就像我在像 orderBy('status')->orderBy('priority')->get() 这样的雄辩模型上运行两到三个 orderBy ..我想运行相同的两个在此 json 列表上进行排序。提前致谢。
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我们可以像下面这样做。

$order_list->sortBy('status')->sortBy('priority')->values()->all();

所以我错过了“->values()->all()”部分。我希望如果有人将来遇到同样的问题,他们可以从中得到提示。


查看完整回答
反对 回复 2023-06-24
?
慕斯王

TA贡献1864条经验 获得超2个赞

如果你想按多个字段排序,那么你可以尝试使用回调方法排序:

$orderedList = $unorderedList->sortBy(function($item) {
  return $item->priority.'-'.$item->status;
});


查看完整回答
反对 回复 2023-06-24
?
森栏

TA贡献1810条经验 获得超5个赞

我想知道当你选择不同的排序方向时会产生什么结果。

$order_list = $order_list->sortByDesc('status');


查看完整回答
反对 回复 2023-06-24
  • 3 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信