重命名laravel集合“数据”键

时间:2017-07-04 13:23:07

标签: laravel laravel-5 collections eloquent laravel-5.4

我可以在laravel集合结果中重命名数据键吗?目前这个

DB::table('contracts AS C')->paginate(1)

返回

  {
  "current_page": 1,
    "data": [
        {
            "id": 191,
            "buyer": "John",
            "provider": "Jane"
        }
    ],
    "from": 1,
    "last_page": 1,
    "next_page_url": "",
    "path": "",
    "per_page": 1,
    "prev_page_url": null,
    "to": 1,
    "total": 1
}

我想要的是这个

  {
  "current_page": 1,
    "parties": [
        {
            "id": 191,
            "buyer": "John",
            "provider": "Jane"
        }
    ],
    "from": 1,
    "last_page": 1,
    "next_page_url": "",
    "path": "",
    "per_page": 1,
    "prev_page_url": null,
    "to": 1,
    "total": 1
}

将数据密钥更改为各方的挑战

3 个答案:

答案 0 :(得分:2)

您可以使用keyBy()收集方法。

$unfiltered = DB::table('contracts AS C')->paginate(1);

$filtered = $unfiltered->keyBy(function ($value, $key) {
     if ($key == 'data') {
         return 'parties';
     } else {
         return $key;
     }
});

return $filtered;

答案 1 :(得分:0)

仅在调用Paginator对象data时设置toArray()键。在此之前,它是一个带有密钥items的集合。

快速而肮脏的解决方案是在Paginator对象上调用toArray()并在json_encode()之前更改数组的键名。

另一个解决方案是扩展Builder类,就像it's done here一样,覆盖paginate()方法和Paginator的toArray()方法。

答案 2 :(得分:0)

您可以将集合转换为数组并对其进行操作:

$result = DB::table('contracts AS C')->paginate(1)->toArray();
$data = $result['data'];
unset($result['data']);
$result['parties'] = $data;

return $result;

这也不需要任何额外的循环。