我有这样的用户和帖子模型有这样的关系:
// BlogPost
public function author() {
return $this->belongsTo('App'User');
}
// User
public function articles() {
return $this->hasMany('App'BlogPost');
}
在数据库中,我有带有"author_id"字段的"blog_posts"表,但 Laravel 返回此错误:
"找不到列:1054 '字段列表'中的未知列'user_id'"。
我能做什么?!
要修复此错误,请将外键名称作为模型中定义的articles
关系的第二个参数User
// User model
public function articles() {
return $this->hasMany('App'BlogPost', 'author_id');
}
解释
在hasMany
或hasOne
关系中,如果没有外键名称作为第二个参数传递,Laravel将使用类名派生外键。
它将按如下方式派生名称。
- 获取类名
- 将其转换为蛇盒
- 追加
_id
因此,在您的情况下,User
下定义的articles
关系将使用名为 user_id
的外键,因为您没有提供不是正确外键的外键名称。
在belongsTo
关系中,如果没有外键名称作为第二个参数传递,Laravel将使用关系名称派生外键。
它将按如下方式派生名称。
- 获取关系名称(函数名称或第 4 个参数)
- 将其转换为蛇盒
- 追加
_id
因此,在您的情况下,在 BlogPost
下定义的author
关系将正确派生名为 author_id
的外键
当你与Laravel命名标准不匹配时,你必须传递你的外键:
public function author() {
return $this->belongsTo('App'User', 'foreign_key');
}
如果您将author_id作为保存用户 id 的列名,则重写函数,如下所示:
// BlogPost
public function author() {
return $this->belongsTo('App'User','author_id');
}
Alireva ....这就是应该的,因为列author_id位于与用户表相关的 BlogPost 表中。
您告诉用户使用该表中名为author_id的列在BlogPost中查找关系,而不是您所期望的user_id
在blog_posts中,您应该设置user_id而不是author_id。默认情况下,Laravel在关系中设置tablename_id,在您的情况下:user_id。