#laravel #lumen
#laravel #lumen
Вопрос:
У меня есть 3 таблицы faculties
, students
, program_studies
. Я использую Lumen 5.7
Вот таблицы:
таблица факультетов:
-----------------
|id|faculty_name|
-----------------
| 1| test |
-----------------
таблица студентов:
----------------------------------
|id|student_name|program_study_id|
----------------------------------
| 1| student 1 | 1|
----------------------------------
| 2| student 2 | 1|
----------------------------------
таблица program_studies:
----------------------------------
|id|program_study_name|faculty_id|
----------------------------------
| 1| program study | 1|
----------------------------------
Это модель:
Student.php
public function programStudy()
{
return $this->belongsTo(ProgramStudy::class);
}
PorgramStudy.php
public function faculty()
{
return $this->belongsTo(Faculty::class);
}
Faculty.php
nothing relation in faculty model
Как получить данные факультета с отношением в модели Student?
На данный момент я создаю подобную функцию в Student.php:
public function getFaculty()
{
return $this->programStudy()->first()->faculty()->first();
}
но я хочу получить данные факультета, используя отношение, а не функцию, если это возможно
Ответ №1:
Вы можете использовать hasOneThrough
отношение, чтобы связать вашего студента с преподавателем.
public function faculty()
{
return $this->hasOneThrough(Faculty::class, ProgramStudy::class);
}
Комментарии:
1. Я уже пытаюсь использовать hasOneThrough, но получаю эту ошибку,
"Call to undefined method App\Models\Student::hasOneThrough()"
если я вызываюdd($student->faculty);
в StudentController2. Действительно ли расширяется ваша модель Student
IlluminateDatabaseEloquentModel
или вы используете более старую версию Laravel?3. Я уже добавляю
use IlluminateDatabaseEloquentModel;
, я использую Lumen 5.74. Извинения — похоже,
hasOneThrough
это было введено в Laravel 5.8. Вероятно, вы захотите обновить свою установку Lumen, если это возможно.