雄辩的关系。更改了表名

时间:2015-03-11 17:04:17

标签: php laravel laravel-4 laravel-5

我的用户表上有id。
我的项目模型有$ fillable字段:

  protected $fillable = [
    'title',
    'description',
    'visibility_level',
    'creator_id'
  ];

关系:

  public function user()
  {
    return $this->belongsTo('App\User');
  }

在用户模型关系中:

  public function projects()
  {
    return $this->hasMany('App\Project');
  }

现在creator_id正在引用user_id。我已经设置了项目模型表:

  $table->foreign('creator_id')->references('id')->on('users')
    ->onUpdate('cascade')->onDelete('cascade');

但是后来我尝试存储数据,它仍然试图添加user_id:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'field list' 

我的store()方法:

public function store(ProjectRequest $request)
{

$project = new Project($request->all());

Auth::user()->projects()->save($project);

flash()->success('Project have been created');

return redirect('news/');
}

我在错误的地方搜索或者搜索什么?我不明白为什么它的“user_id”这个“user_id”生成的名字来自哪里?

1 个答案:

答案 0 :(得分:2)

user_id密钥来自您的班级名称(User)。所有laravel都是蛇案,并附加_id。要解决您的问题,请在hasMany课程中使用User的第二个可选参数:

public function projects()
{
    return $this->hasMany('App\Project', 'creator_id');
}

这应该可以解决您现在的问题,但是,要将这种关系用于另一个方向,您还需要对Project模型进行一些更改。你有两个选择:

  1. 重命名关系方法:

    public function creator()
    {
        return $this->belongsTo('App\User');
    }
    
  2. 通过将密钥作为第二个参数传递给belongsTo来覆盖密钥:

    public function user()
    {
        return $this->belongsTo('App\User', 'creator_id');
    }
    
  3. 考虑到你想要实现的目标,我建议你选择第一个选项。