Laravel 中间多对多关系检查 table

Laravel Many To Many Relationship Check with intermediate table

我是新来的,非常希望我没有问重复的问题。

我完全不熟悉编码并直接进入 Laravel,但现在 运行 遇到了一个我不太能找到答案的问题。

我有以下模型设置:

User.php

    public function roles()
    {
        return $this->belongsToMany(Role::class, 'user_roles')->as('roles')->withTimestamps();
    }

Role.php

有 table 列 'name'

    public function users()
    {
        return $this->belongsToMany(User::class, 'user_roles');
    }

用户Role.php

中间 table 具有 table 列 'user_id 和 'role_id'

我面临的问题是我想对用户创建一个角色检查,我猜想创建一个中间件将是可行的方法。但是当我想检查用户是否具有以下代码的角色时:

if (Auth::user()->roles->name == 'manager')
    {
        // do something here
    }
    else {
        // do something else here
    }

我收到一条错误消息,指出 'name' 在该集合实例上不存在。

我发现我可以遍历用户拥有的角色并显示它们:

$user = User::find(1);
foreach($user->roles as $role)
{
print $role->name;
}

但我完全不知道为什么角色检查不起作用。

Auth::user()->roles是角色集合,是Illuminate\Database\Eloquent\Collection的一个实例。因此,对于该检查,您可能需要执行以下操作:

if (Auth::user()->roles->contains('name', 'manager') {
    // do something here
} else {
    // do something else here
}

as Auth::user()->roles returns 所有角色的集合,因此您不能直接应用“==”运算符