Laravel 11.x Красноречивый способ установить связь через отношения (всего 4 таблицы)Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Laravel 11.x Красноречивый способ установить связь через отношения (всего 4 таблицы)

Сообщение Anonymous »

Я использую последнюю версию Laravel. Я пытаюсь настроить связь метода модели, которая проходит через другие промежуточные таблицы.
Понимая структуру таблицы ниже, моя цель — получить коллекцию студентов (только), которые зачислены в курс, принадлежащий модели учебной программы.
Учебный план->Курс->Студенческий курс->Студент
Я подошел близко, как вы можете см. в модели Curriculum метод Student(), я могу получить коллекцию всех курсов вместе с их студентами... но мне не нужны курсы вместе с ней.
Есть есть ли красноречивый способ добиться этого?
Спасибо!
Структура таблицы
учебная программа

id

..
курсы

id

curriculum_id

..
student_courses

id

course_id

student_id

..
студенты
id

..
Модели
учебная программа /**
* @return HasMany
*/
public function course(): HasMany
{
return $this->hasMany(Course::class);
}

/**
* @return HasManyThrough
*/
public function class(): HasManyThrough
{
return $this->hasManyThrough(ClassModel::class, Course::class);
}

/**
* @return HasManyThrough
*/
public function student()
{
// this works as expected, but brings courses too, I only want students.
return $this->hasManyThrough(StudentCourse::class, Course::class)->with('student');
}

курс
/**
* @return HasMany
*/
public function class(): HasMany
{
return $this->hasMany(ClassModel::class);
}

/**
* @return BelongsTo
*/
public function curriculum(): BelongsTo
{
return $this->belongsTo(Curriculum::class, 'curriculum_id', 'id');
}

/**
* @return HasManyThrough
*/
public function student(): HasManyThrough
{
return $this->hasManyThrough(Student::class, StudentCourse::class,
'course_id',
'id',
'id',
'student_id'
);
}

курсы_студентов

/**
* @return BelongsTo
*/
public function student(): BelongsTo
{
return $this->BelongsTo(Student::class);
}

/**
* @return BelongsTo
*/
public function course(): BelongsTo
{
return $this->BelongsTo(Course::class);
}

студент

/**
* @return HasOne
*/
public function user(): HasOne
{
return $this->HasOne(User::class, 'userID', 'user_id');
}

/**
* @return HasManyThrough
*/
public function course(): HasManyThrough
{
return $this->HasManyThrough(Course::class, StudentCourse::class,
'student_id',
'id',
'id',
'course_id'
);
}

/**
* @return HasManyThrough
*/
public function class(): HasManyThrough
{
return $this->HasManyThrough(ClassModel::class , StudentClass::class,
'student_id',
'id',
'id',
'class_id'
);
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... tal-tables
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»