我创建了一个模型NearMiss
,它与Type
模型有多对多的关系。当存在对特定NearMiss
的GET请求时,我希望将数组附加到JSON输出,该输出具有属于name
实例的所有Type
实例的NearMiss
属性。
我可以将一个类型数组附加到输出中,但我想摆脱所有附加信息(例如数据透视信息)。
GET请求/nearmisses/{nearmiss}
执行以下方法:
public function show($id)
{
try {
$nearmiss = NearMiss::findOrFail($id)->first();
$nearmiss->types->makeHidden(['id', 'created_at', 'updated_at']);
return response()->json($nearmiss);
} catch(ModelNotFoundException $e) {
abort(400, 'Model not found');
}
}
NearMiss
模型具有以下类型关系:
public function types()
{
return $this->belongsToMany('App\Type', 'near_miss_type', 'near_miss_id', 'type_id');
}
当前输出:
{
"id": 1,
"location_long": "0.0000000",
"location_lat": "0.0000000",
"employee_id": 1,
"created_at": "2019-02-11 16:38:24",
"updated_at": "2019-02-11 16:38:24",
"types": [
{
"id": 1,
"name": "Brandgevaar"
"created_at": "2019-02-11 16:33:25",
"updated_at": "2019-02-11 16:33:25",
},
{
"id": 2,
"name": "Slipgevaar",
"created_at": "2019-02-11 16:34:12",
"updated_at": "2019-02-11 16:34:12",
}
]
}
我知道我可以删除其他属性(例如id,created_at,updated_at),但这仍然留给我一个Type
实例数组(只有一个名称属性)。当我尝试flatten()
时,我收到一个错误,即flatten()
不能用于BelongsToMany关系。
期望的输出:
{
"id": 1,
"location_long": "0.0000000",
"location_lat": "0.0000000",
"employee_id": 1,
"created_at": "2019-02-11 16:38:24",
"updated_at": "2019-02-11 16:38:24",
"types": [
"Brandgevaar", "Slipgevaar"
]
}
请有人帮助我获得所需的输出。
您可以手动加载类型并使用pluck()
函数仅获取每种类型的名称。
$nearmiss->types = $nearmiss->types()->pluck('name');
但是我不确定这是否会干扰Eloquent的神奇属性。