Laravel 5 - 用户个人头像

时间:2015-07-16 09:09:59

标签: php mysql laravel-5

我正在处理的应用程序出现轻微问题..

我有以下表格:

1. Users

   id, 
   first_name,
   last_name

2. File_uploads
   id, 
   name, 
   location

3. profile_link
   id, 
   user_id, 
   file_id

内部个人资料链接,我已将(user_id)设为id Users的外键,而file_id是[{1}}的外键在id表格上。

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

User

由于用户将在用户部分中上传1个文件,即他们的个人资料图片。尝试访问时出现以下错误:

  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) 上的user_id,因为这就是为什么我有一个链接表,但在这种情况下它看起来不像是在注册它。

有人有什么想法吗?

更新:

如果file_uploads中的记录更改为与用户'2'相同的ID,并且我使用:file_uploads,则会立即找到该配置文件。但是我怎么能这样做,链接到链接表?

2 个答案:

答案 0 :(得分:3)

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

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

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])

答案 1 :(得分:1)

由于您使用数据透视表链接file_uploads,因此需要使用hasManyThrough()关系。

没有has-one-through的方法,所以你可以只返回返回的集合中的第一个结果。