我用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
我该如何解决,谢谢
正如我在laravel代码中发现的那样,它可能具有可以更改json_encode()
结果结果的函数,因此我决定将分页值解析为JSON,然后将其解析为Array对象以更改数据,最后解析回返回向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;
}
来自laravel doc
与大多数其他收集方法不同,变换修改了 收集本身。如果您想创建一个新集合,请使用 地图方法。
所以,我建议您使用
这样的地图$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;
});