Laravel: красноречивые 5 таблиц в 1 запросе - PullRequest
0 голосов
/ 08 октября 2019

У меня есть 5 таблиц, и я хочу, чтобы это было в форме красноречивых. Как мне объединить все таблицы, используя with(), или есть другие способы сделать это.

  1. студент
  2. расписание
  3. schedule_student student_id,schedule_id
  4. активность schedule_id
  5. баллы student_id, activity_id, score

Мои модели

//Activity
    public function schedule()
    {
        return $this->belongsTo(Schedule::class);
    }
    public function students()
    {
        return $this->belongsToMany(Student::class,'scores');
    }

//Student

    public function schedules()
    {
        return $this->belongsToMany(Schedule::class,'schedule_student');
    }
    public function activities()
    {
        return $this->belongsToMany(Activity::class,'scores');
    }

//Schedule
    public function activities()
    {
        return $this->hasmany(Activity::class);
    }
    public function students()
    {
        return $this->belongsToMany(Student::class,'schedule_student');
    }

//Student
    public function student()
    {
        return $this->belongsTo(Student::class);
    }
    public function activity()
    {
        return $this->belongsTo(Activity::class);
}

Как мне объединить все 4 таблицы (кроме schedule_student), чтобы json выглядел снизу:

schedule[] 
   =>activities[]
         =>students[]
               =>scores[]

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете использовать вложенные отношения, попробуйте что-то вроде:

$schedules = Schedule::with('activities', 'students', 'activities.scores')->get();

Честно говоря, я ничего не понимаю в вашей модели данных, я думаю, что вы смешали некоторые названия и модели. Но в глобальной идее вы можете использовать вложенные отношения, используя точку (.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...