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 所有角色的集合,因此您不能直接应用“==”运算符
我是新来的,非常希望我没有问重复的问题。
我完全不熟悉编码并直接进入 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 所有角色的集合,因此您不能直接应用“==”运算符