如何基于数据库关系返回json响应

时间:2019-05-18 10:25:14

标签: laravel laravel-5.7

我对Laravel很陌生, 假设我有2个表:main_sportsub_sport。这两个表具有一对多关系。 1种运动可以有许多子运动。

我想要以下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"
        },
]
}

您能帮助我获得理想的结果吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

使用以下代码

$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([
            'status' => 'error',
            'sports' => $query
        ], 200);