laravel - 如何根据数据库关系返回json响应
问题描述
我对 Laravel 很陌生,假设我有 2 个表:main_sport
和sub_sport
. 这两个表具有一对多的关系。一项运动可以有许多子运动。
我想要以下 json 格式
{
"success": "1",
"sports": [
"id": 1,
"name_of_categories": "Popular Sports",
"sub_sports:[
{
"id": 1,
"name_sub_sport_category": "Badminton"
},
{
"id": 2,
"name_sub_sport_category": "Football"
},
{
"id": 3,
"name_sub_sport_category": "Cricket"
},
]
]
"sports":[
"id": 2,
"name_of_categories": "Team Sports",
"sub_sports:[
{
"id": 4,
"name_sub_sport_category": "Badminton"
},
{
"id": 5,
"name_sub_sport_category": "Football"
},
]
]
}
我尝试使用此功能,我得到以下结果
public function fetch()
{
$query= DB::table('details')
->join('table_sub_sport_category','table_sub_sport_category.id','=','details.sub_id')
->join('table_main_sport_category','table_main_sport_category.id','=','details.main_id')
->select(DB::raw('table_main_sport_category.id as id'),'table_main_sport_category.name_of_categories','table_sub_sport_category.name_sub_sport_category')
->get()
return response()->json(['success' =>'1','data'=>$query]);
}
{
"success": "1",
"data": [
{
"id": 1,
"name_of_categories": "Popular Sports",
"name_sub_sport_category": "Badminton"
},
{
"id": 1,
"name_of_categories": "Popular Sports",
"name_sub_sport_category": "Football"
},
{
"id": 1,
"name_of_categories": "Popular Sports",
"name_sub_sport_category": "Cricket"
},
]
}
你能帮我得到想要的结果吗?
解决方案
您应该像这样在主运动模型中定义 sub_sport:
class Sport extends Model{
public function sub_sport(){
return $this->hasMany(SubSport::class);
}
}
在你的控制器中你应该这样写:
$data = Sport::with('sub_sport')->get();
推荐阅读
- git - Git没有打开difftool?
- php - 使用 GET 将参数传递给 PHP 函数
- angular - 使用lazyLoadmodules 错误的redirectTo
- reactjs - 如何仅将一种商店类型传递给组件(当商店是联合类型时)
- c++ - 如何从指向指针数组的指针中删除对象?
- html - 用于删除提交按钮中的填充(边距?)的 CSS
- module - Rust:无法从 2 个文件中导入 1 个模块
- docker - Docker CE 安装错误 - Ubuntu 16.04 ppc64le (IBM Power)
- c# - 有没有比使用 C# 的 AWSSDK.Iot 更好的包发布到 Aws Iot Core?
- javascript - 如何在不等待页面重新加载的情况下为 BrowserView 切换网站?