试图获得非对象一对多房地产的属性“名称”

时间:2019-03-09 18:34:51

标签: laravel

我的模特:

Admin.php

public function role()
{
    return $this->belongsTo('App\Role');
}

在我的控制器上

LoginController.php

protected function sendLoginResponse(Request $request)
{
    $request->session()->regenerate();

    $this->clearLoginAttempts($request);

    foreach($this->guard()->user()->role as $role)
    {
        if($role->name=='SuperAdmin')
        {
            return redirect(route('super.admin.index'));
        }
        elseif ($role->name == 'Admin')
        {
            return redirect(route('super.admin.index'));
        }
    }
}

在我的SuperAdmin中间件上:

 public function handle($request, Closure $next)
{
    $role=Auth::user()->role;
    if (is_null($role)) {
        return redirect(route('/'));
    }

  if($role->name=='SuperAdmin')
  {
      return $next($request);
  }
  return redirect('/');

}

}

我创建了一个名为Admin的自定义防护和自定义登录系统。我已经使用了一对多关系,但这给了我:

  

试图获取非对象的属性

1 个答案:

答案 0 :(得分:0)

您的role关系是belomgsTo。在这种情况下,$this->guard()->user()->role 返回Role对象的实例或null。

protected function sendLoginResponse(Request $request)
{
    $request->session()->regenerate();

    $this->clearLoginAttempts($request);

    $role = $this->guard()->user()->role;
    if (is_null($role)) {
       return redirect(route('super.admin.index')); 
    }    

    if($role->name=='SuperAdmin') {
        return redirect(route('super.admin.index'));
    } elseif ($role->name == 'Admin') {
        return redirect(route('super.admin.index'));
    }
}

在中间件中

public function handle($request, Closure $next)
{
    if (is_null(Auth::user())) {
        return redirect(route('/'));
    }

    $role=Auth::user()->role;
    if (is_null($role)) {
        return redirect(route('/'));
    }

  if($role->name=='SuperAdmin')
  {
      return $next($request);
  }
  return redirect('/');
}