首页 > 解决方案 > 如何根据数据库关系返回json响应

问题描述

我对 Laravel 很陌生,假设我有 2 个表:main_sportsub_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"
        },
]
}

你能帮我得到想要的结果吗?

标签: laravellaravel-5.7

解决方案


您应该像这样在主运动模型中定义 sub_sport:

class Sport extends Model{
    public function sub_sport(){
        return $this->hasMany(SubSport::class);
    }
}

在你的控制器中你应该这样写:

$data = Sport::with('sub_sport')->get();

推荐阅读