我有一个名为EquipmentProfile
的模型,它与EquipmentProfileType
的关系定义如下:
public function equipmentType()
{
return $this->belongsTo(EquipmentProfileType::class, 'equipment_profile_type_id');
}
我在EquipmentProfile
上定义了访问器,以使我能够从这种关系中获得特定的值:
public function getCategoryAttribute()
{
return $this->equipmentType->name;
}
然后,我将category
包含在$appends
数组中,以便在我将模型作为JSON返回时将其包括在内。
这很好用,除了在我的JSON响应中,我也得到了与EquipmentProfileType
的整个关系:
//...more fields above
"category": "Brewing",
"equipment_type": {
"id": 10,
"name": "Brewing",
"created_at": null,
"updated_at": null
}
我只希望返回category
,也不希望返回equipment_type
对象。如果我从category
数组中删除了$appends
,那么响应中将不包含equipment_type
。
如何在没有category
的情况下退回equipment_type
?
修改
我的控制器在存储库上调用方法:
public function store(EquipmentProfileRequest $request)
{
$data = $request->except(['api_token']);
return $this->equipmentProfileRepository->store($data, $request->user());
}
这是下面的存储库代码:
public function store(array $data, User $user)
{
if (!array_key_exists('name', $data) || $data['name'] == '') {
$data['name'] = 'Equipment Profile';
}
$data['user_id'] = $user->id;
return $this->equipmentProfile->create($data);
}
注意
即使使用tinker
也可以得到相同的结果:
Psy Shell v0.9.6 (PHP 7.1.7 — cli) by Justin Hileman
>>> App\Models\EquipmentProfile::first()->toJson()
=> "{... "category":"Brewing","equipment_type":{"id":10,"name":"Brewing","created_at":null,"updated_at":null}}"
答案 0 :(得分:1)
EquipmentType
模型已包含在您的JSON输出中,因为在调用getCategoryAttribute()
时将自动加载该关系。
要隐藏它,请将关系名称添加到模型上的hidden
数组中。然后,在调用toArray()
和toJson()
时将其过滤掉。
class EquipmentProfile extends Model
{
// ...
protected $hidden = [
'equipmentType'
];
// ...
}
答案 1 :(得分:0)
尝试在下面使用此代码:
$result = $this->equipmentProfile->create($data);
return response()->json($result, 200, array(), JSON_PRETTY_PRINT);
那应该删除所有多余的变量和对象。