尝试更改 Laravel 分页→项目中的数据但失败了,我该如何解决?



我用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;
});

最新更新