我有2个型号。
用户:
class User extends Eloquent implements UserInterface, RemindableInterface {
protected $table = 'users';
public function group ()
{
return $this->belongsTo('Group');
}
}
和小组:
class Group extends Eloquent {
protected $table = 'groups';
}
用户表在group
列上有一个外键,该外键引用了组表上的id
。
架构可能会有所帮助
Schema::table('users', function ($table) {
$table->foreign('group')
->references('id')
->on('groups')
->onDelete('cascade');
});
当我尝试使用以下内容获取用户组时:
User::find(1)->group()->name
我收到错误
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name
按要求提供的组架构:
Schema::create('groups', function ($table) {
$table->increments('id');
$table->string('name');
$table->integer('permission');
});
以下是一些屏幕:
用户表
群组表格:
用户表格FK
修改
@Cryode在聊天会话中为我解决了这个问题。问题是我的名字有冲突。模型方法使用与列名称(group
)相同的名称。只需更改数据库中的列名即可解决问题。
答案 0 :(得分:4)
在帮助聊天之后,问题是存在一个名为group
的列,并且关系方法也称为group
,因此表列值优先于关系方法。
将关系方法或group
列重命名为group_id
都是合适的解决方案(我建议使用group_id
路线)。
原始答案:
您通过魔术属性检索组,而不是直接从方法中检索。
echo User::find(1)->group->name;
如果检索group()
方法,它将返回关系对象,不执行任何查询并获取相关对象。
此外,Eloquent会假设你的外键列名是什么。 Group
会自动转换为group_id
列。如果您有一个名为group
的现有列,那么您应该在您的关系中明确指定:
public function group ()
{
return $this->belongsTo('Group', 'group');
}
如果您收到属性group
的“试图获取非对象属性”错误,那么您的关系不会返回任何结果($user->group
将为NULL
)。此时,您应确保正确设置了您的关系(例如,使用正确的belongsTo,hasOne,hasMany等),并确保您的数据库中确实存在相关条目。