如何使用laravel雄辩地访问多个外键

时间:2019-06-12 21:13:34

标签: php mysql laravel eloquent

我想获取所有数据的学生档案。

我的表格(我汇总了所需的表格。):


    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 个答案:

答案 0 :(得分:1)

您可以将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;