如何修复 laravel 8 中的错误 "Trying to get property 'title' of non-object"

How can I fix this error "Trying to get property 'title' of non-object" in laravel 8

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

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

Blade:

@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->roles->title) 我得到值 "Admin" 但是像这样 {{ $user->roles->title }} 就给出了错误。

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

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

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