Laravel lumen получает данные из другого отношения

#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); в StudentController

2. Действительно ли расширяется ваша модель Student IlluminateDatabaseEloquentModel или вы используете более старую версию Laravel?

3. Я уже добавляю use IlluminateDatabaseEloquentModel; , я использую Lumen 5.7

4. Извинения — похоже, hasOneThrough это было введено в Laravel 5.8. Вероятно, вы захотите обновить свою установку Lumen, если это возможно.