Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何从透视表中为laravel中的用户获取角色名称?_Database_Laravel_Query Builder - Fatal编程技术网

Database 如何从透视表中为laravel中的用户获取角色名称?

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[模型] 公共职能角色 { 返

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; }; 在此透视表中,创建用户和角色之间的关系表


这是因为根据您的模式设计,用户可以有许多角色

用户角色:多对多关系

所以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);
}