Database 如何从透视表中为laravel中的用户获取角色名称?
Admin.php[Middlewere] 公共函数handle$request,Closure$next { 如果Auth::check&&Auth::user->role->name==“admin”{ 返回$next$请求; } 返回重定向::路由“home”; } 我想检查roles表的列名是否等于admin 我尝试过Auth::user->role->name==“admin” 我犯了一个错误 此集合实例上不存在属性[name] 参考模型 User.php[模型] 公共职能角色 { 返回$this->belongToManyRole::class,'role\u user','user\u id','role\u id'->带时间戳; } 参考表 用户表 架构::创建“用户”,函数蓝图$表{ $table->id; $table->string'name'; $table->string'email'->唯一; $table->string'photo'->可为空; $table->timestamp'email\u verified\u at'->可为空; $table->string'password'; $table->longText'cartitems'->可为空; $table->longText'wishlist'->可为空; $table->unsignedBigInteger“折扣”->default0; $table->rememberToken; $table->timestamps; }; 这是用户表。注意这里没有直接的角色 角色表 Schema::创建“角色”,函数蓝图$表{ $table->id; $table->string'name'; $table->string'display_name'; $table->timestamps; }; 这是角色表。每个用户都有一个角色,如超级管理员、管理员、卖家或客户 角色用户表 Schema::创建“角色\用户”,函数蓝图$表{ $table->id; $table->unsignedbiginger'user_id'; $table->foreign'user_id'->引用'id'->关于'users'->删除'cascade'; $table->unsignedbiginger'role_id'; $table->foreign'role_id'->引用'id'->关于'roles'->删除'cascade'; $table->timestamps; }; 在此透视表中,创建用户和角色之间的关系表Database 如何从透视表中为laravel中的用户获取角色名称?,database,laravel,query-builder,Database,Laravel,Query Builder,Admin.php[Middlewere] 公共函数handle$request,Closure$next { 如果Auth::check&&Auth::user->role->name==“admin”{ 返回$next$请求; } 返回重定向::路由“home”; } 我想检查roles表的列名是否等于admin 我尝试过Auth::user->role->name==“admin” 我犯了一个错误 此集合实例上不存在属性[name] 参考模型 User.php[模型] 公共职能角色 { 返
这是因为根据您的模式设计,用户可以有许多角色 用户角色:多对多关系 所以Auth::user->role给出了角色模型实例的集合。您正在尝试访问集合上的name属性,但无法执行此操作 将if条件更改为此
if (Auth::check() && Auth::user->role()->where('name', 'admin')->exists()) {
我还建议您在用户模型中将关系的名称从角色更改为角色。as角色对用户和角色共享的关系类型提供了更多信息
public function roles(){
return $this->belongsToMany(App\Role::class, 'role_user' 'user_id', 'role_id');
}
这是因为根据您的模式设计,用户可以有许多角色 用户角色:多对多关系 所以Auth::user->role给出了角色模型实例的集合。您正在尝试访问集合上的name属性,但无法执行此操作 将if条件更改为此
if (Auth::check() && Auth::user->role()->where('name', 'admin')->exists()) {
我还建议您在用户模型中将关系的名称从角色更改为角色。as角色对用户和角色共享的关系类型提供了更多信息
public function roles(){
return $this->belongsToMany(App\Role::class, 'role_user' 'user_id', 'role_id');
}
这是因为您试图访问集合中的值,而您与laravel的关系非常重要。您应该提取所有名称,然后检查它是否存在于\u数组中
我建议将角色关系改为角色关系,因为用户在此上下文中可以有许多角色。这是因为您试图访问集合上的值,而您的Larvel关系是。您应该提取所有名称,然后检查它是否存在于\u数组中 我建议将角色关系改为角色,因为在此上下文中用户可以有许多角色。您可以使用 你可以用 何处使用 何处使用
@ImrulHasan请接受它,因为它将在未来帮助他人。谢谢你。。。。如果我想检查角色是管理员还是卖家。需要做哪些更改?@ImrulHasan在_array'seller'中,$roles | |在_array'admin'中$roles@ImrulHasan请接受它,因为它将在将来帮助他人。谢谢你。。。。如果我想检查角色是管理员还是卖家。需要做哪些更改?@ImrulHasan在_array'seller'中,$roles | |在_array'admin'中,$rolesTry这边。。。!!工作,我完全忘记了有一个地方有这样的分类法。。。!!工作时,我完全忘记了有一个什么地方有克拉苏斯
$role = User::where('id',Auth::user()->id)->whereHas('role',function ($query){
$query->where('name','=','admin');
})->first();
if (Auth::check() && isset($role) && !empty($role) ) {
return $next($request);
}