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

时间:2019-05-02 05:27:05

标签: laravel pagination

我使用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

我该如何解决,谢谢

2 个答案:

答案 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;
}