php - 如何使用 laravel eloquent 访问多个外键

标签 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');
     }

    // ...

Controller :


    // ...
    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",
            }
        ]
      // ...

我尝试了多种方法,但无法解决我的问题。

最佳答案

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

关于php - 如何使用 laravel eloquent 访问多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56570435/

相关文章:

asp.net - 可扩展性案例研究

php - 在 php 7.2 的 laragon 上安装 php-decimal 扩展,找不到指定的模块。扩展小数点不存在

laravel - 如何重定向到带有查询参数的 URL?

php - 使用 Zend 框架 2 将数据插入和更新到两个表(事务)

PHP 创建 ping 脚本需要将响应转换为对象才能读取它

php - 将 mysql 转换为 mysqli - 如何获取超全局连接对象?

php - 有没有办法从mssql增量导出到mysql?

php - WP 触摸小部件

PHP 转义编码引号

mysql - 与同一实体类型和表的多个一对多关系?