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.