我有用户和项目表。在项目表中,user_id是外键。我创建了一个项目,当我尝试保存项目详细信息时,它显示了这个错误:
SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(labtest
。projects
,CONSTRAINT projects_user_id_foreign
FOREIGN KEY({{ 1}})REFERENCES user_id
(users
)ON UPDATE CASCADE)(SQL:插入id
(Projects
,name
,description
, date
,updated_at
)值(e,e,2017-12-31,2017-09-19 15:21:06,2017-09-19 15:21:06))
我怎么能解决这个问题?
用户表迁移:
created_at
项目表迁移
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
用户模型:
Schema::create('projects', function (Blueprint $table) {
$table->increments('id')->unique();
$table->string('name');
$table->text('description');
$table->date('date');
$table->timestamps('date');
});
Schema::table('projects',function(Blueprint $table)
{
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade');
});
项目模型:
public function project()
{
return $this->hasMany('App\Project');
}
控制器:
public function user() {
return $this->belongsTo('App\User','id','user_id');
}
答案 0 :(得分:0)
在定义项目表时,user_id
不可为空。因此,如果您要插入项目,则必须将有效的user_id
传递给create()
来电。
答案 1 :(得分:0)
您有两种选择:
第一个:
$data = $request->all();
$data['user_id'] = Auth::user()->id;
Project::create($data);
//....
第二个:
Auth::user()->project()->create($request->all());
答案 2 :(得分:0)
您可以让用户使用它来创建项目,如下所示:
$user = auth()->user();
$user->project()->create([
$request->all()
]);
这样做的好处是你不必把'user_id'直接作为$ fillable。当然,您可能希望将这些(其他)字段添加到模型中的可填写(因为您使用的是create()
方法)
观察到的一件事是你的相关模型的复数化,我认为你可以通过使用projects
而不是project
来避免混淆,因为它的一个用户来自很多项目。