我使用Laravel制作Restful API
我试图更改分页结果中的数据
我的代码
$rooms->getCollection()->transform(function ($item) {
if (!$item->last_message) {
$item->last_message = (object) array('updated_at' => ''.$item->updated_at);
}
$item->test0 = $item->id;
$item->test1 = $item->last_message;
$item->test2 = \json_encode($item->last_message);
$item->test3 = \json_encode($item);
return $item;
});
我希望$item->last_message
等于item->updated_at
但结果总是null
这是json结果
{
"current_page": 1,
"data": [
{
"id": 33,
"user_id": 1,
"seller_id": 3,
"room_id": 1,
"market_id": 1,
"created_at": "2019-05-02 10:23:29",
"updated_at": "2019-05-02 10:23:29",
"last_message": null,
"test0": 33,
"test1": {
"updated_at": "2019-05-02 10:23:29"
},
"test2": "{\"updated_at\":\"2019-05-02 10:23:29\"}",
"test3": "{\"id\":33,\"user_id\":1,\"seller_id\":3,\"room_id\":1,\"market_id\":1,\"created_at\":\"2019-05-02 10:23:29\",\"updated_at\":\"2019-05-02 10:23:29\",\"last_message\":null,\"test0\":33,\"test1\":{\"updated_at\":\"2019-05-02 10:23:29\"},\"test2\":\"{\\\"updated_at\\\":\\\"2019-05-02 10:23:29\\\"}\"}"
}
],
"first_page_url": "http://localhost/v2/users/1/chat-rooms?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://localhost/v2/users/1/chat-rooms?page=1",
"next_page_url": null,
"path": "http://localhost/v2/users/1/chat-rooms",
"per_page": 15,
"prev_page_url": null,
"to": 1,
"total": 1
}
请注意,我可以从$item->last_message
获取数据以将数据设置为$test1
,但是当将对象解析为JSON时,$item->last_message
数据将是null
我该如何解决,谢谢
答案 0 :(得分:0)
来自幼虫文档
与大多数其他收集方法不同,transform修改了 集合本身。如果您想创建一个新集合,请使用 地图方法。
所以,我建议您像这样使用地图
$rooms->getCollection()->map(function ($item) {
if (!$item->last_message) {
$item->last_message = (object) array('updated_at' => ''.$item->updated_at);
}
$item->test0 = $item->id;
$item->test1 = $item->last_message;
$item->test2 = \json_encode($item->last_message);
$item->test3 = \json_encode($item);
return $item;
});
答案 1 :(得分:0)
正如我在Laravel代码中发现的那样,它可能具有可以更改json_encode()
结果的结果的功能,因此我决定将分页值解析为json,然后解析为数组对象以更改数据,最后解析回json以进行响应
我的代码
// Parse to JSON then parse back to array object
// To make sure the format is correct (Same as Laravel standard)
$json = $rooms->toJson();
$parsedJson = \json_decode($json, true);
$items = $parsedJson['data'];
$count = count($items);
for ($i = 0; $i < $count; $i++)
{
$item = $items[$i];
if (!$item['last_message'])
{
$item['last_message'] = array(
'message' => 'Has joined the chat', /* TODO: may change this message later */
'created_at' => $item['created_at'],
'updated_at' => $item['updated_at']);
}
$parsedJson['data'][$i] = $item;
}