Laravel的关系使用Eloquent真的正确吗?
Laravel's relationship using Eloquent really correct?
我有一个项目 运行 Laravel 5.5,我在数据库中有以下 table。
USERS (
ID,
NAME,
PERMISSION_ID
)
PERMISSIONS (
ID,
NAME
)
如果我没记错的话,USERS和PERMISSIONS的关系是1.1(USERS最少有1个权限,最多有1个),所以是一对一的关系。
在我的用户模型中,我建立了以下关系。
class User extends Authenticatable
{
public function permission () {
return $this->hasOne('App\Models\Permission');
}
}
但通过这种方式Laravel/Eloquent 在 PERMISSIONS table 中查找关系。生成一个 select 类似于:
SELECT * FROM PERMISSIONS WHERE PERMISSIONS.USER_ID = 1
我已经查阅了Laravel文档,看到我可以在hasOne方法中指定ForeignKey和LocalKey。这样就解决了关系。
但是Laravel/Eloquent默认获取权限table中的信息真的正确吗?正确的方法不是用 PERMISSION_ID?
查看 USERS table
@Edit
由于 Alexey Mezenin 的回复
我研究了 hasOne 和 belongsTo 的区别。我找到了以下答案:
据我了解,当外键在另一个上时 table 正确的是使用 hasOne。
当外键在模板自身时table,正确的是使用belongsTo。
下次我会继续关注这些细节,感谢 Alexey Mezenin 和 jedrzej.kurylo
你们的关系颠倒了,你用的是 hasOne()
而不是 belongsTo
。在 User
模型中使用此关系:
public function permission()
{
return $this->belongsTo(Permission::class);
}
并且在 Permission
模型中您可能想要添加 hasOne()
关系(以防万一您想要使用它):
public function user()
{
return $this->hasOne(User::class);
}
但通常情况下,同一个权限可以被多个用户使用。如果是这种情况,只需将 hasOne
更改为 hasMany
.
我有一个项目 运行 Laravel 5.5,我在数据库中有以下 table。
USERS (
ID,
NAME,
PERMISSION_ID
)
PERMISSIONS (
ID,
NAME
)
如果我没记错的话,USERS和PERMISSIONS的关系是1.1(USERS最少有1个权限,最多有1个),所以是一对一的关系。
在我的用户模型中,我建立了以下关系。
class User extends Authenticatable
{
public function permission () {
return $this->hasOne('App\Models\Permission');
}
}
但通过这种方式Laravel/Eloquent 在 PERMISSIONS table 中查找关系。生成一个 select 类似于:
SELECT * FROM PERMISSIONS WHERE PERMISSIONS.USER_ID = 1
我已经查阅了Laravel文档,看到我可以在hasOne方法中指定ForeignKey和LocalKey。这样就解决了关系。
但是Laravel/Eloquent默认获取权限table中的信息真的正确吗?正确的方法不是用 PERMISSION_ID?
查看 USERS table@Edit
由于 Alexey Mezenin 的回复
我研究了 hasOne 和 belongsTo 的区别。我找到了以下答案:
据我了解,当外键在另一个上时 table 正确的是使用 hasOne。
当外键在模板自身时table,正确的是使用belongsTo。
下次我会继续关注这些细节,感谢 Alexey Mezenin 和 jedrzej.kurylo
你们的关系颠倒了,你用的是 hasOne()
而不是 belongsTo
。在 User
模型中使用此关系:
public function permission()
{
return $this->belongsTo(Permission::class);
}
并且在 Permission
模型中您可能想要添加 hasOne()
关系(以防万一您想要使用它):
public function user()
{
return $this->hasOne(User::class);
}
但通常情况下,同一个权限可以被多个用户使用。如果是这种情况,只需将 hasOne
更改为 hasMany
.