Laravel雄辩地说出了多对多关系决定了是否存在关系

时间:2016-12-11 17:48:38

标签: php laravel-5 eloquent many-to-many laravel-5.3

我正在开发一个项目,其中包含两个表rolesusers之间的多对多关系。我还有一个数据透视表role_user,其中包含有关其他两个表之间关系的信息。

role_user两个字段,即两个表的idrole_iduser_id

现在我有一个来自users表的用户对象,另一个角色对象来自roles表。我想确定特定角色是否属于某个用户。

我知道这可以通过为数据透视表创建模型然后使用模型来完成,可以查询role_user表并确定关系是否存在。 但我发现这种方法很有压力,并想知道雄辩是否提供了一种简单的方法来确定这一点。 谢谢你的帮助吗?

1 个答案:

答案 0 :(得分:0)

您不需要拥有role_user模型。您可能已经拥有角色模型以及与您拥有的表相关的用户模型。 在Role.php和User.php中指定多对多关系

User.php - 职能角色

    public function roles()
{
    return $this->belongsToMany('App\Role');
}

Role.php - 功能用户

    public function users()
{
    return $this->belongsToMany('App\User');
}

如果不遵循表列和表中的命名约定,则可能必须定义其他参数,如数据透视表等。既然你似乎遵守了规则,我就不会解释它。但你总是可以参考laravel documentation's eloquent many-to-may section

现在您可以轻松检查用户是否属于某个角色。 请考虑以下考试

    //select a user 
    $user = App\User::find(1);
    //select a role
    $role = App\Role::find(1);
    //get $user's roles. This ill return an array of role objects that are belong to $user
    $userRoles = $user->roles;
    //check whether $role is in that array
    if(in_array($role, $userRoles)){
    //do something
    }