Как получить доступ к нескольким внешним ключам с помощью laravel eloquent - PullRequest
0 голосов
/ 13 июня 2019

Я хочу получить файлы студента со всеми данными.

Мои таблицы (я суммировал таблицы для того, что мне было нужно.):


    students
     - id
     - name 
    student_files
     - id
     - student_id
     - type_file_id
     - file_url
    type_files
     - id
     - name

Модель:


    // ...
    class Student extends Authenticatable{
    // ...

     public function files()
     {
        return $this->hasMany('App\StudentFiles');
     }

    // ...

Контроллер:


    // ...
    class Student extends Authenticatable{
     public function getFiles(Request $request)
     {
        $user = Student::Find($request->user()->id)->load('files');
     }
    // ...

Я пробовал что-то подобное ... не работает.


     public function files()
     {
        return $this->hasMany('App\StudentFiles')->hasOne('App\TypeFiles');
     }

Результат запроса:


// ...

    "files": [
        {
            "id": 1,
            "student_id": 1,
            "type_file_id": 1,
            "file_url": "example.jpg",
        }
    ]

// ...

Результат, который я хочу

 // ...


       "files": [
            {
                "id": 1,
                "student_id": 1,
                "type_file_id": 1,
                "name": "Profile",
                "file_url": "example.jpg",
            }
        ]
      // ...

Я пробовал это несколькими способами, но не могу решить свою проблему.

1 Ответ

1 голос
/ 13 июня 2019

Вы можете добавить отношение typeFile к StudentFile:

class StudentFiles extends Model {
  public function typeFile()
  {
     return $this->hasOne('App\TypeFile', 'type_file_id');
  }
}

А затем получить к нему доступ с нетерпением:

$user = Student::with('files', 'files.typeFile')->find($request->user()->id);
$typeFileName = $user->files->typeFile->name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...