php - 在 laravel Eloquent 结果中添加额外的键

标签 php eloquent laravel-5.4

我有一个 Laravel 查询生成器结果,如下所示

{
  "data": [
    {
      "id": "",
      "awardID": 2,
      "title": "Dummy title",
      "status": "active",
      "raceStart":"",
      "raceEnd:":""
    }
  ]
}      

我想要输出的是这样的

{
  "data": [
    {
      "id": "",
      "awardID": 2,
      "title": "Dummy title",
      "status": "active",
      "period": {
        "raceStart":"",
        "raceEnd:":""
      }
    }
  ]
} 

如果期间是一个与父表具有 1 对 1 关系的表,那么这会容易得多,但这里的情况并非如此。 如何才能实现这一目标?

最佳答案

检查这是否有效。我还没有尝试过,但根据文档我们可以添加访问器和修改器。但它会改变您对模型所做的每一个响应。

使用 Eloquent

// Your Model
class Race extends Model
{
    {...}
    protected $appends = ['period'];
    // accessor
    public function getPeriodAttribute($value)
    {  
        $this->attributes['period'] = (object)[];
        $this->attributes['period']['raceStart'] = $this->attributes['raceStart'];
        $this->attributes['period']['raceEnd'] = $this->attributes['raceEnd'];
        unset($this->attributes['raceStart']); = $value;
        unset($this->attributes['raceEnd']);
        return $this->attributes['period'];
    }
}

现在,当您访问 $race->period 时,将给出 raceStartraceEnd 值。

引用号:https://laravel.com/docs/5.4/eloquent-mutators#accessors-and-mutators

另外一个选择是在查询后,做一个 map

{...}
->map(function($data) {
    $data->period = (object)[];
    $data->period['raceStart'] = $data->raceStart;
    $data->period['raceEnd'] = $data->raceEnd;
    unset($data->raceStart);
    unset($data->raceEnd);
    return $data;
});

引用号:https://laravel.com/docs/5.4/eloquent-collections#introduction

使用查询生成器

$races = DB::table('races')->get();

$races = array_map(function ($data) {
    $data->period = (object)[
        "raceStart" => $data->raceStart,
        "raceEnd" => $data->raceEnd
    ];
    unset($data->raceStart);
    unset($data->raceEnd);
    return $data;
}, $races->data);

关于php - 在 laravel Eloquent 结果中添加额外的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911290/

相关文章:

php - Eloquent - 更新集合中的所有模型

Laravel:插入数据透视表

php - Laravel 5.4 内部错误 : Failed to retrieve the default value

php - yii 中带有 php 代码的 Javascript 函数

php - 内容长度 header 设置不正确

php - CSS 无法在 MAMP 上呈现

php - 如何使用数组从数据库中获取数据

laravel - Laravel 所有请求中的附加属性

php - Laravel - 无法使用 'Where' 查询过滤数据库

php - 如何回滚最后一个供应商在 laravel 中发布