我有一个 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
时,将给出 raceStart
和 raceEnd
值。
引用号: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/