尝试连接到laravel驱动的数据库时未定义的属性

问题描述 投票:1回答:1

我试图创建中间件来控制用户的访问,为什么我创建了一个表角色可能会有这个错误

未定义的属性:Illuminate \ Database \ Eloquent \ Builder :: $ role_name

用户模型

<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function roles(){
      return $this->belongsTo('App\Role','role_id','id');
    }

    public function  hasRole($title){
        $user_role=$this->with('roles');
        if(!is_null($user_role)){
            $user_role=$user_role->role_name;
        }
        return ($user_role==$title)?true:false;
    }
}

中间件创建

 <?php

namespace App\Http\Middleware;

use Closure;

class create
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next,$Admin,$SuperAdmin)
    {
        $User=$request->user();

        return ($User->hasRole($SuperAdmin)||$User->hasRole($Admin))?$next($request):response(view('errors.401'),401);
    }
}
php laravel
1个回答
0
投票

你要做的是接收关系对象。你可以这样做:

public function  hasRole($title){
    $user_role = '';
    if(!is_null($this->roles)){
        $user_role=$this->roles->role_name;
    }
    return ($user_role==$title)?true:false;
}

当您处理元素集合(急切负载约束)时,qazxsw poi语句对于接收关系很有用。

© www.soinside.com 2019 - 2024. All rights reserved.