Laravel 5 说:“'字段列表'中的未知列'user_id'”,但我有'a


Laravel 5 says: "Unknown column 'user_id' in 'field list'", but I have 'author_id'

我有这样的用户和帖子模型有这样的关系:

// 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');
}

解释

hasManyhasOne关系中,如果没有外键名称作为第二个参数传递,Laravel将使用类名派生外键。

它将按如下方式派生名称。

  1. 获取类名
  2. 将其转换为蛇盒
  3. 追加_id

因此,在您的情况下,User 下定义的articles关系将使用名为 user_id 的外键,因为您没有提供不是正确外键的外键名称。


belongsTo关系中,如果没有外键名称作为第二个参数传递,Laravel将使用关系名称派生外键。

它将按如下方式派生名称。

  1. 获取关系名称(函数名称或第 4 个参数)
  2. 将其转换为蛇盒
  3. 追加_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。