【问题标题】:Trying to get property of non-object when getting role for user获取用户角色时尝试获取非对象的属性
【发布时间】:2020-12-30 07:28:09
【问题描述】:

我在用户和角色之间创建了一种关系,就像一个用户属于一个角色

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

现在我正在尝试访问用户角色并抛​​出此错误

错误

试图获取非对象的属性

获取用户角色的代码:

@foreach($users as $user)
        <tr role="row" class="odd">
            <td>{!! $user->role->name !!}</td>
        </tr>
@endforeach

表格架构:

用户: ID, 角色标识, 姓名, 电子邮件

角色: ID, 名字

我在 Tinker 中对其进行了测试,它运行良好,但是当我在浏览器中启动它时,它会抛出该错误。

【问题讨论】:

  • 我在您的代码中没有发现任何问题。告诉我们你在哪里定义$users、整个User 类和Role 类。
  • 如何发送 $users 来查看?无论如何,您都希望预先加载角色关系以避免在 @foreach 循环中进行 1+n 次查询。
  • 你用过get()方法吗?还是 toArray() 方法?

标签: laravel laravel-5 laravel-5.2


【解决方案1】:

当您尝试$user-&gt;role-&gt;name 并获取Trying to get property of non-object 时,也许您可​​以检查表Users 中是否存在没有role_id = null 的用户。

【讨论】:

    【解决方案2】:

    设置您的用户角色。它发生在我身上,我从我的管理控制台设置了用户角色并且我能够使用

      public function index(Request $request){
            //error_log($request->user());
    
            return redirect()->route($request->user()->role);
        }
    

    我认为用户或角色为 null 或尚未设置,这就是原因

    【讨论】:

      【解决方案3】:

      你可以写 `

      @foreach($users as $user)
              <tr role="row" class="odd">
                 @foreach($user->role as $r)
                   <td>{{ $r->name }}</td>
                 @endforeach`
              </tr>
      @endforeach
      

      ` 希望这能解决您的问题。

      【讨论】:

      • $user-&gt;role 只能返回一个项目(不是集合),因为它是通过 belongsTo 方法定义的,这是一对多的关系。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2015-09-30
      • 2016-02-14
      • 1970-01-01
      • 2016-05-02
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多