【问题标题】:Undefined property while trying to connect to a laravel powered database尝试连接到 laravel 驱动的数据库时未定义的属性
【发布时间】:2016-05-22 01:26:10
【问题描述】:

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

未定义属性: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);
    }
}

【问题讨论】:

  • 请分享中间件代码
  • 该错误与您尚未执行您正在调用role_name 的查询有关,因此您尝试在查询生成器对象而不是结果对象上调用它。我对此不是 100%,但请尝试 $user_role=$this-&gt;with('roles')-&gt;get();

标签: php laravel


【解决方案1】:

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

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

with(...) 语句对于在处理元素集合(急切负载约束)时接收关系很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多