我有一个运行Laravel 5.5的项目,我在数据库中有以下表格。
USERS (
ID,
NAME,
PERMISSION_ID
)
PERMISSIONS (
ID,
NAME
)
如果我没错,USERS与PERMISSIONS的关系是1.1(USERS至少有1个权限,最多1个),因此它是OneToOne关系。
在我的用户模型中,我建立了以下关系。
class User extends Authenticatable
{
public function permission () {
return $this->hasOne('App\Models\Permission');
}
}
但是这样,Laravel / Eloquent会在PERMISSIONS表中查找关系。生成类似于:
的选择SELECT * FROM PERMISSIONS WHERE PERMISSIONS.USER_ID = 1
我已经查阅了Laravel文档,发现我可以在hasOne方法中指定ForeignKey和LocalKey。这解决了这种关系。
但是,对于Laravel / Eloquent,默认情况下获取PERMISSIONS表中的信息是否正确?正确的一个不是用PERMISSION_ID查看USERS表吗?
@Edit
由于Alexey Mezenin的回应
我研究了hasOne和belongsTo之间的区别。我找到了以下答案:
What is the difference between BelongsTo And HasOne in Laravel
根据我的理解,当外键在另一个表上时,正确的是使用hasOne。
当外键在模板自己的表中时,正确的是使用belongsTo。
下次我会继续关注这些细节,谢谢Alexey Mezenin和jedrzej.kurylo
答案 0 :(得分:1)
您的关系已被颠倒,您正在使用hasOne()
代替belongsTo
。在User
模型中使用此关系:
public function permission()
{
return $this->belongsTo(Permission::class);
}
在Permission
模型中,您可能希望添加hasOne()
关系(如果您想要使用它):
public function user()
{
return $this->hasOne(User::class);
}
但通常,许多用户都可以使用相同的权限。如果是这种情况,只需将hasOne
更改为hasMany
。