我有用户和帖子模型有这种关系:
// BlogPost
public function author() {
return $this->belongsTo('App\User');
}
// User
public function articles() {
return $this->hasMany('App\BlogPost');
}
在数据库中我有" blog_posts"表" author_id"字段,但Laravel返回此错误:
"未找到列:1054未知列' user_id'在'字段列表'"
我该怎么办?!
答案 0 :(得分:4)
要修复错误,请将外键名称作为articles
模型中定义的User
关系的第二个参数
// User model
public function articles() {
return $this->hasMany('App\BlogPost', 'author_id');
}
<强>解释强>
在hasMany
或hasOne
关系中,如果没有将外键名称作为第二个参数传递,Laravel将使用类名来派生外键。
它将得出如下名称。
_id
因此,在您的情况下,articles
下定义的User
关系将使用名为user_id
的外键,因为您没有提供不是正确外键的外键名称。
在belongsTo
关系中,如果没有传递外键名作为第二个参数,Laravel将使用关系名来派生外键。
它将得出如下名称。
_id
因此,在您的情况下,author
下定义的BlogPost
关系将正确派生名为author_id
的外键
答案 1 :(得分:1)
如果您与Laravel命名标准不匹配,则必须传递外键:
public function author() {
return $this->belongsTo('App\User', 'foreign_key');
}
答案 2 :(得分:1)
如果您将author_id作为保存用户ID的列名,则重写以下函数:
// BlogPost
public function author() {
return $this->belongsTo('App\User','author_id');
}
答案 3 :(得分:0)
Alireva ....这就是应该如何,因为专栏author_id在BlogPost表中,与用户表有关。
您告诉用户使用该表中名为author_id的列查找BlogPost中的关系,而不是您期望的user_id
答案 4 :(得分:0)
在blog_posts中,您应该设置user_id而不是author_id。 默认情况下,Laravel在关系中设置tablename_id,在您的情况下:user_id。