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.
}
我正在使用 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.
}