我正在做的一个应用程序有一个小问题…
我有以下表格:
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_id
是file_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');
,则立即找到配置文件。但我怎么做呢,链接到链接表?
您的表描述的关系是Users
和File_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()
关系。
没有直通的方法,所以您可以只返回返回集合中的第一个结果。