Laravel - Eloquent to Json,然后对 json 对象进行 sortBy 不起作用

Posted

技术标签:

【中文标题】Laravel - Eloquent to Json,然后对 json 对象进行 sortBy 不起作用【英文标题】:Laravel - Eloquent to Json, and then sortBy on json object not working 【发布时间】:2020-10-10 16:20:12 【问题描述】:

我有一个想要排序的 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 eloquent对象转换使用$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 列表上排序。

提前致谢。

【问题讨论】:

是的,您在第三行缺少) 您存储的确切输入和从 redis 获得的输入是什么。 你在redis中有json,它返回那个json,然后你试图对json字符串进行排序? @VinayakSarawgi 这个 jSon 我已经提到了,这就是存储在 redis 中的确切内容。我从 redis 取回这个以进行更改,然后想按“状态”或“优先级”再次对其进行排序 @lagbox 是的,这是正确的。如果状态或优先级键值发生更改,我只想让这个 json 排序。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我想通了。实际上,我们不需要@brokedid 建议的回调。我们可以这样做。

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

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

【讨论】:

以上是关于Laravel - Eloquent to Json,然后对 json 对象进行 sortBy 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 多对多查询 whereIn

在 Laravel 中通过多对多关系模型对 eloquent 模型进行排序

laravel eloquent 中的一对多关系

Laravel 4.2 Eloquent 获取特定用户和特定角色

Laravel Eloquent 一对多关系

Laravel 5 / Eloquent - 对属于多的关系进行查询过滤