【问题标题】:How can I fix this error "Trying to get property 'title' of non-object" in laravel 8如何在 laravel 8 中修复此错误“尝试获取非对象的属性‘标题’”
【发布时间】:2021-09-21 14:05:39
【问题描述】:

背景: 我安装了一个新的 Laravel 版本 8.49.2,并将我的应用程序逻辑(控制器、路由、视图、中间件、模型、自定义配置)从(一个旧的 Laravel v5.8 项目)中移出,到目前为止一切正常。

但是当我访问刀片中的关系属性时,我收到以下错误:Trying to get property 'title' of non-object (View: /Path/to/resources/views/users.blade.php)

刀片:

@foreach($users as $user)
<p> {{ $user->roles->title }} </p>
@endforeach

这个

<p> {{ $user['roles']['title'] }} </p>
or
<p> {{ $user->roles['title'] }} </p>

还报错Trying to access array offset on value of type null

控制器:

$users = User::with(['roles'])->get();
return view('users', compact('users'));

用户模型:

public function roles()
{
    return $this->belongsTo(Role::class, 'levelId'); 
}

角色模型:

    public function users()
{
    return $this->hasMany(User::class, 'levelId');
}

当我死并转储 dd($user-&gt;roles-&gt;title) 时,我得到了 "Admin" 的值 但只是像{{ $user-&gt;roles-&gt;title }} 那样回显它会给出错误。

注意: 当我将我的 PHP 版本更改为 7.3 时,这不会产生错误。但在 PHP 7.4.20 或 7.4.21 中会发生此错误。但我需要 PHP 7.4.* 有谁知道我该如何解决这个问题?

【问题讨论】:

  • 你有很多关系,所以你会得到一个角色对象数组,所以你需要创建foreach循环
  • 我更新了代码以显示作为数组访问时发生的错误。 &lt;p&gt; {{ $user['roles']['title'] }} &lt;/p&gt; or &lt;p&gt; {{ $user-&gt;roles['title'] }} &lt;/p&gt; 也给出了错误Trying to access array offset on value of type null
  • 一个用户没有角色......你有一个循环,所以它可能是该集合中的任何一个,你只是用dd转储第一个用户,使用dump 如果你不想杀死脚本

标签: php laravel laravel-5 eloquent laravel-8


【解决方案1】:

看起来有些用户没有角色。所以最好检查 null。当你 dd($user-&gt;roles-&gt;title) 它只检查第一个用户记录而不是所有用户。

@foreach($users as $user)
<p> {{ $user->roles->title??null }} </p>
@endforeach

【讨论】:

  • 所有用户在我的测试数据库中都有一个角色
  • @Cornel 你试过我的解决方案了吗?如果仍然抛出错误,则 dd($users->toArray()) 发布有问题的结果
  • 你是对的。我应该仔细检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2019-10-02
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多