Laravel 属于抛出未定义的错误
Posted
技术标签:
【中文标题】Laravel 属于抛出未定义的错误【英文标题】:Laravel belongs to throwing undefined error 【发布时间】:2014-09-21 11:07:15 【问题描述】:我有 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');
);
这里有一些屏幕:
用户表
组表:
还有 users 表 FK
编辑
@Cryode 在聊天会话中为我解决了这个问题。问题是我的名字有冲突。模型方法使用与列名相同的名称 (group
)。只需更改数据库中的列名即可解决问题。
【问题讨论】:
向我们展示组架构。 我添加了组架构@TimWithers 【参考方案1】:通过聊天帮助后,问题是存在一个名为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 等),并确保您的数据库中确实有相关条目。
【讨论】:
我已经尝试过了,但是使用User::find(1)->group->name
得到错误Trying to get property of non-object
那么你的关系没有返回任何结果。确保您有一个与该员工关联的组。
但是当我使用group()
检索关系时,我可以在受保护的attributes
属性中看到相关用户,所以确定正在检索数据吗?
$employee->group()
将返回 BelongsTo
类;它不会执行任何查询或查找任何相关的用户或组。确保您的users
表中有一个group_id
列,否则这种关系将不起作用。
在答案中添加了有关表名的信息。以上是关于Laravel 属于抛出未定义的错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4 中的 Bllim DataTables 抛出未定义的 getQuery() 异常
为啥“”.abcd 返回未定义的值而不是在 Javascript 中抛出未定义的错误(但 Typescript 抛出警告)
React-native-maps 标记方法 animateMarkerToCoordinate 抛出未定义的错误