调用未定义的方法Illuminate \ Database \ Query \ Builder :: intersect()

时间:2017-02-09 07:21:18

标签: laravel laravel-5 laravel-5.4

我想使用gate..Where In user model

进行Laravel授权

User.php

 public function hasPermission($name)
    {
       $permission = Permission::where('name','=', $name)->first();
        $permissions = \DB::table('role_permission')
            ->join('permissions', 'permissions.id', '=', 'role_permission.permission_id')
            ->select('role_permission.*')
            ->where('role_permission.permission_id', '=',$permission->id)
            ->get();  

        if(! $permissions) {
            return false;
        }

        return !! $permission->intersect($this->$permission)->count();

    }

在AuthserviceProvider中

 public function boot(GateContract $gate)
        {
            $this->registerPolicies($gate);

            $gate->before(function($user, $ability) {

                  return $user->hasPermission($ability);
            });

        }

我的表结构如。

用户有姓名,电子邮件,密码,身份证 权限有名称,id 角色有名字,身份证 role_permission具有role_id,permission_id

任何人都可以帮我找出这里的错误吗?

2 个答案:

答案 0 :(得分:0)

我想这是因为您可以将intersect应用于集合,而您却收到错误消息,说明您正在调用它Illuminate\Database\Query\Builder

我看到你在$permission上调用它,它目前是Permission的记录(模型)。可能这只是一个错字,你想使用$permissions而不是$permission

无论如何,试着更好地解释一下你所寻找的行为是什么,因为它不清楚。

答案 1 :(得分:0)

intersect方法属于Collection类。您无法在Model上使用交叉方法。你可以尝试:

return !! collect([$permission])->intersect($this->$permission)->count();
  

$ this-> $权限应为arraycollection