связь с таблицей и как ее использовать в laravel контроллере - PullRequest
0 голосов
/ 05 февраля 2020

Итак, у меня есть 2 таблицы, этап и событие. Стадия имеет много событий, а событие принадлежит стадии. И я хочу показать всю сцену и ее событие как json. Вот мой код в контроллере:

public function getschedule(){
    $schedule = Stage::all();

    //$event = Event_schedule2020::all();
    if (!$schedule) {
      return response()->json(['msg'=>'Error not found','code'=>'404']);
    }

    foreach($schedule->events as $array){

        $datax[] = [
          'id'=>$array->id,
          'time'=>$array->time,
          'category'=>$array->category,
          'type'=>$array->title,
          'designer'=>$array->designer,
        ];
      }

      foreach ($schedule as $item) {
        $jadwal[] = [

          'id'=>$item->id,
          'date'=>$item->date,
          'place'=>$item->stage,
          'data'=>$datax,

        ];
      }

   return response()->json($jadwal);
  }

, но я всегда получаю эту ошибку

ошибка

, так, что я могу сделать об этом?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2020

в вашей Сцене модели вы должны создать отношения, подобные этой

public function events()
{
    return $this->hasMany('App\Event');
}

, затем в вашем контроллере

public function getschedule(){

   $schedules = Stage::with('events')->get()->toArray();

   return response()->json($schedules );
}
0 голосов
/ 05 февраля 2020

ваша ошибка - вызов events в коллекции, для решения которой вы можете изменить foreach следующим образом:

public function getschedule(){
  $schedules = Stage::all(); // I add a 's' to $schedule because is better set plural name;

  if (!$schedule) {
    return response()->json(['msg'=>'Error not found','code'=>'404']);
  }

  foreach($schedules as $schedule){

    $datax = [];
    foreach($schedule->events as $event){
        $datax[] = [
          'id'=>$event->id,
          'time'=>$event->time,
          'category'=>$event->category,
          'type'=>$event->title,
          'designer'=>$event->designer,
        ];
     }

     $jadwal[] = [
        'id'=>$item->id,
        'date'=>$item->date,
        'place'=>$item->stage,
        'data'=>$datax,
      ];
  }

  return response()->json($jadwal);
}

, но вышеприведенное решение не рекомендуется, потому что отправлять много запросов на сервер в любом foreach l oop лучше следующее решение:

    public function getschedule(){
      $schedules = Stage::with('events')->get(); // only this difference with above soloution and the rest is the same
  if (!$schedule) {
    return response()->json(['msg'=>'Error not found','code'=>'404']);
  }

  foreach($schedules as $schedule){

    $datax = [];
    foreach($schedule->events as $event){
        $datax[] = [
          'id'=>$event->id,
          'time'=>$event->time,
          'category'=>$event->category,
          'type'=>$event->title,
          'designer'=>$event->designer,
        ];
     }

     $jadwal[] = [
        'id'=>$item->id,
        'date'=>$item->date,
        'place'=>$item->stage,
        'data'=>$datax,
      ];
  }

  return response()->json($jadwal);
}
0 голосов
/ 05 февраля 2020

Вы можете использовать встроенные функции, чтобы делать то, что вы хотите. Laravel автоматически преобразует модель в JSON, нет необходимости создавать массивы с ней.

public function getschedule() {
    // tell laravel you want to eager load events
    $stages = Stage::with('events')->get();

    // laravel knows you loaded events and therefor you can just return it and it does the rest automatically
    return response()->json($stages);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...