我有两种模式:
Category
模型包含:id PRIMARY_KEY
,category_name
,...
Item
模型包含:id PRIMARY_KEY
,item_name
,category_id
(类别表上的ID),...
我希望实现这个JSON响应:
Item:
{
"id": 1,
"item_name": "some item name",
"category": {
"id": "5",
"category_name": "some category name"
}
}
到目前为止,我已成功实现了回应:
{
"id": 1,
"item_name": "some item name",
"category_id": "5", // i dont want it to appear here!
"category": {
"id": "5",
"category_name": "some category name"
}
}
使用查询:
$data = Item::select('id', 'item_name', 'category_id')->with(['category' => function ($query) {
$query->select('id', 'category_name');
}])->get();
return response()->json($data);
我尝试了select('id', 'item_name')
而不是select('id', 'item_name', 'category_id')
,但它失败了,因为with
需要'category_id'才能工作。对此有任何干净的解决方案吗?
答案 0 :(得分:0)
解决方案是在Collection
中使其$data = Item::select('id', 'item_name', 'category_id')->with(['category' => function ($query) {
$query->select('id', 'category_name');
}])->get()->makeHidden('category_id');
return response()->json($data);
:
{{1}}
答案 1 :(得分:0)
是的,您无法删除category_id
,因为它需要创建关系。在查询并设置$data
后,您可以执行类似的操作。
$response = [];
$data->each(function ($value) use (&$response) { // pass $response by reference
unset($value->category_id);
$response[] = $value;
});
return response()->json($response);