Я использую последнюю версию 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
Laravel 11.x Красноречивый способ установить связь через отношения (всего 4 таблицы) ⇐ Php
Кемеровские программисты php общаются здесь
1729378171
Anonymous
Я использую последнюю версию Laravel. Я пытаюсь настроить связь метода модели, которая проходит через другие промежуточные таблицы.
Понимая структуру таблицы ниже, моя цель — получить коллекцию студентов (только), которые зачислены в курс, принадлежащий модели учебной программы.
Учебный план->Курс->Студенческий курс->Студент
Я подошел близко, как вы можете см. в модели Curriculum метод Student(), я могу получить коллекцию всех курсов вместе с их студентами... но мне не нужны курсы вместе с ней.
Есть есть ли красноречивый способ добиться этого?
Спасибо!
Структура таблицы
[b]учебная программа [/b]
id
..
[b]курсы[/b]
id
curriculum_id
..
[b]student_courses[/b]
id
course_id
student_id
..
[b]студенты[/b]
id
..
Модели
[b]учебная программа[/b] /**
* @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');
}
[b]курс[/b]
/**
* @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'
);
}
[b]курсы_студентов[/b]
/**
* @return BelongsTo
*/
public function student(): BelongsTo
{
return $this->BelongsTo(Student::class);
}
/**
* @return BelongsTo
*/
public function course(): BelongsTo
{
return $this->BelongsTo(Course::class);
}
[b]студент[/b]
/**
* @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'
);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79105940/laravel-11-x-eloquent-way-to-get-relation-through-relations-4-total-tables[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия