我的用户表上有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”生成的名字来自哪里?
答案 0 :(得分:2)
user_id
密钥来自您的班级名称(User
)。所有laravel都是蛇案,并附加_id
。要解决您的问题,请在hasMany
课程中使用User
的第二个可选参数:
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');
}
考虑到你想要实现的目标,我建议你选择第一个选项。