У меня есть 3 таблицы academic_years, classroom, courses
, а также сводная таблица academic_year_classroom
во многих отношениях с 3 таблицами. Сводная таблица имеет 3 столбца academic_year_id, courses_id, classroom_id
.
Academi c год это базовая модель отношений. В году много классных комнат, и в каждом классе для этого года есть много курсов.
//*********ACADEMICYEAR MODEL *************
public function classrooms()
{
return $this->belongsToMany('App\Model\Setting\Classroom', 'academic_year_classroom);
}
//***********COURS MODEL ********************** //
public function classrooms()
{
return $this->belongsToMany('App\Model\Setting\Classroom', 'academic_year_classroom');
}
//********CLASSROOM MODEL **************
public function academicyears()
{
return $this->belongsToMany('App\Model\Setting\AcademicYear');
}
public function courses()
{
return $this->belongsToMany('App\Model\Setting\Cours', 'academic_year_classroom', 'classroom_id', 'courses_id');
}
Я определил, что сводная таблица выглядит следующим образом:
Schema::create('academic_year_classroom', function (Blueprint $table) {
$table->id();
$table->foreignId('academic_year_id')->constrained()->onUpdate('cascade')->onDelete('cascade');
$table->foreignId('classroom_id')->constrained()->onUpdate('cascade');
$table->foreignId('courses_id')->constrained()->onUpdate('cascade');
});
Я могу получить все годы и их классы на каждый год без каких-либо проблем. Я также могу получить курсы на каждый год отдельно. года и курсы, назначенные каждому классу на этот год.
Я пробовал этот return $year = AcademicYear::with('classrooms', 'classrooms.courses')->orderBy('year', 'DESC')->get(['id', 'year', 'active_year']);
, он возвращает каждый академический c год со своими классами, но включает курсы этого класса за все годы которые имеют этот класс.