表关系以及在laravel控制器中如何使用它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表关系以及在laravel控制器中如何使用它相关的知识,希望对你有一定的参考价值。

所以,我有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);
  }

但我总是会收到此错误

the error

所以,对此我有什么办法吗?

答案

您可以利用内置函数来完成您想做的事情。 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 $stages
}
另一答案

在您的[[Stage模型中,您必须创建这样的关系

public function events() { return $this->hasMany('AppEvent'); }
然后在您的

Controller

public function getschedule(){ $schedules = Stage::with('events')->get()->toArray(); return response()->json($schedules ); }

以上是关于表关系以及在laravel控制器中如何使用它的主要内容,如果未能解决你的问题,请参考以下文章

如何在关系表laravel 5.8中解码Json数据

Laravel 雄辩模型如何从关系表中获取数据

如何在 Laravel 中使用多表查询而不使用 Eloquent 关系

Laravel:如何使用多个数据透视表关系

Laravel:数据表搜索选项不使用关系表字段

与laravel 4中的数据透视表存储关系