Laravel 5 -用户配置文件图像


Laravel 5 - User Profile Images

我正在做的一个应用程序有一个小问题…

我有以下表格:

1. Users
   id, 
   first_name,
   last_name
2. File_uploads
   id, 
   name, 
   location
3. profile_link
   id, 
   user_id, 
   file_id

在profile link中,我设置了(user_id)是Users表上id的外键,file_idfile_uploads表上id的外键。

我创建了一个名为Fileuploads的模型,并将以下内容添加到User模型中:

  public function profile_image()
  {
    return $this->hasOne('App'Fileuploads');
 }

因为用户将有一个文件上传在用户部分,即他们的个人资料图像。当尝试访问时,我得到以下错误:

$user = 'App'User::find(2);
dd($user->profile_image)
Column not found: 1054 Unknown column 'file_upload.user_id' in 'where clause' (SQL: select * from `file_upload` where `file_upload`.`user_id` = 2 and `file_upload`.`user_id` is not null limit 1)

但是我没有试图访问file_uploads上的user_id,因为这就是为什么我有一个链接表,但在这种情况下,它看起来不像注册它。

有人有什么想法吗?

更新:

如果file_uploads中的记录更改为与用户'2'相同的id,并且我使用:return $this->hasOne('App'Fileuploads', 'id', 'id');,则立即找到配置文件。但我怎么做呢,链接到链接表?

您的表描述的关系是UsersFile_uploads之间的多对多关系,使用profile_link作为您的链接表

如果您在profile_image关系上使用belongsToMany()而不是hasOne(),您可以让它为您处理链接表。像这样:

public function profile_image()
{
    return $this->belongsToMany('App'Fileuploads', 'profile_link', 'user_id', 'file_id');
}

由于这被建模为多对多,因此预计每个用户将/可能有> 1条File_uploads记录,因此您将获得一个集合,并需要像这样访问它:

$user = 'App'User::find(2);
dd($user->profile_image[0])

因为要使用数据透视表来链接file_uploads,所以需要使用hasManyThrough()关系。

没有直通的方法,所以您可以只返回返回集合中的第一个结果。