我正在处理的应用程序出现轻微问题..
我有以下表格:
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
,则会立即找到该配置文件。但是我怎么能这样做,链接到链接表?
答案 0 :(得分:3)
您的表格描述的关系是Users
和File_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的方法,所以你可以只返回返回的集合中的第一个结果。