Laravel 5说:"未知栏' user_id'在'字段列表'",但我有' author_id'

时间:2016-02-25 13:24:58

标签: php laravel model laravel-5

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

// 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'在'字段列表'" 我该怎么办?!

5 个答案:

答案 0 :(得分:4)

要修复错误,请将外键名称作为articles模型中定义的User关系的第二个参数

// User model 
public function articles() {
    return $this->hasMany('App\BlogPost', 'author_id');
}

<强>解释

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

它将得出如下名称。

  1. 获取课程名称
  2. 将其转换为蛇案
  3. 附加_id
  4. 因此,在您的情况下,articles下定义的User关系将使用名为user_id的外键,因为您没有提供不是正确外键的外键名称。

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

    它将得出如下名称。

    1. 获取关系名称(函数名称或第4个参数)
    2. 将其转换为蛇案
    3. 附加_id
    4. 因此,在您的情况下,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。