Laravel 8: 尝试在一对多关系上获取非对象的 属性 'name'

Laravel 8: Trying to get property 'name' of non-object on One To Many Relationship

我正在使用 Laravel 8 来开发我的项目,在这个项目中,我在用户模型和角色模型之间应用了 OneToMany 关系,如下所示:

User.php:

public function role()
    {
        return $this->belongsTo(User::class);
    }

Role.php:

public function users()
    {
        return $this->hasMany(Role::class);
    }

现在我想编辑用户,所以在 edit.blade.php,我添加了这一行来获取用户拥有的角色的名称:

<option selected="selected">{{ $user->role->name }}</option>

请注意,我已经在 edit 处压缩了 user 方法:

public function edit(User $user)
    {
        return view('admin.users.edit', compact('user'));
    }

目前所有用户都有一个角色 ID。

但现在我得到这个错误:

Trying to get property 'name' of non-object (View: edit.blade.php)

所以这里出了什么问题?如何获取用户拥有的角色名称?

这里还有 roles table 的迁移,如果你想看的话:

public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('slug');
            $table->timestamps();
        });
    }

这是add_fk_to_users_table迁移:

public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->unsignedBigInteger('role_id')->nullable()->unsigned();
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        });
    }

非常感谢你们对此的任何想法或建议...

提前致谢。

你的User.php应该是这样的:

public function role()
{
    return $this->belongsTo(Role::class);// <--- this was your mistake. "Role" is correct!
}

Role.php

public function users()
{
    return $this->hasMany(User::class); // <--- class should be "User" not "Role" here.
}