在null Laravel上调用成员函数roles()


Call to a member function roles() on null Laravel

我在Laravel中制作用户角色函数,一切都工作得很好,从哪里我都有错误:调用成员函数roles()或null。

这是我的html从我发送请求:

<td><input type="checkbox" {{ $user->hasRole('User') ? 'checked' : '' }} name="role_user"></td>
<td><input type="checkbox" {{ $user->hasRole('Author') ? 'checked' : '' }} name="role_author"></td>
<td><input type="checkbox" {{ $user->hasRole('Admin') ? 'checked' : '' }} name="role_admin"></td>

然后是我在模型用户和模型角色之间建立关系的函数,以及我检查角色的函数:

 public function roles(){
        return $this->belongsToMany('App'Role','role_user','user_id','role_id');
    }
  public function hasAnyRole($roles){
        if(is_array($roles)){
            foreach ($roles as $role){
                if($this->hasRole($role)){
                    return true;
                }
            }
        }else{
            if($this->hasRole($roles)){
                return false;
            }
        }
        return false;
    }

    public function hasRole($role){
        if($this->roles->where('name',$role)->first()){
            return true;
        }
        return false;
    }

最后我传递新角色的函数:

public function postAdminAssignRoles(Request $request)
    {
        $user = User::where('email', $request['email'])->first();
        $user->roles()->detach();
        if ($request['role_user']) {
            $user->roles()->attach(Role::where('name', 'User')->first());
        }
        if ($request['role_author']) {
            $user->roles()->attach(Role::where('name', 'Author')->first());
        }
        if ($request['role_admin']) {
            $user->roles()->attach(Role::where('name', 'Admin')->first());
        }
        return redirect()->back();
    }

我不知道为什么这是不工作了,因为一切都很好,直到现在。什么好主意吗?

我猜postAdminAssignRoles方法出现错误。

可能用户的电子邮件在数据库中不存在,因此调用first()方法返回null。

您可能想要使用firstOrFail()来清楚地看到电子邮件是无效的。或者在用first()添加if (! $user) { ... }抓取模型并做任何事情后,如重定向,以防您不想显示错误。