我有带有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'
我的商店()方法:
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"生成的名称从何而来?
user_id
键来自类的名称 ( User
)。拉拉维尔所做的只是蛇箱并附加_id
。要解决您的问题,请在User
类上使用第二个可选参数来hasMany
:
public function projects()
{
return $this->hasMany('App'Project', 'creator_id');
}
这应该可以解决您的问题,但是,要从另一个方向使用关系,您还需要对Project
模型进行一些更改。您有两种选择:
重命名您的关系方法:
public function creator() { return $this->belongsTo('App'User'); }
通过将密钥作为第二个参数传递给
belongsTo
来覆盖密钥:public function user() { return $this->belongsTo('App'User', 'creator_id'); }
鉴于您要实现的目标,我建议您选择第一个选项。