как вернуть ответ JSON на основе отношения базы данных - PullRequest
0 голосов
/ 18 мая 2019

Я довольно новичок в Laravel, допустим, у меня есть 2 таблицы: main_sport и sub_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 ]

1 голос
/ 18 мая 2019

Вы должны определить sub_sport в основной модели спорта следующим образом:

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

И в вашем контроллере вы должны написать это:

$data = Sport::with('sub_sport')->get();
0 голосов
/ 18 мая 2019

Используйте ниже код

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...