我有reply_qs表和postqs表。postqs_id是reply_qs表中的外键。当我尝试将reply_qs表单数据保存在数据库中时,显示此错误。
错误:
SQLSTATE [23000]:违反完整性约束:1452无法添加或
更新一个
子行:外键约束失败(fyp2
。reply_qs
,CONSTRAINT
reply_qs_postqs_id_foreign
外键(postqs_id
)参考postqs
(id
)在删除CASCADE时在更新CASCADE上)(SQL:插入reply_qs
(reply
,updated_at
,created_at
)值(saann,2017-09-22 15:35:03,
2017-09-22 15:35:03))
我该如何解决?并请解释为什么我会收到此错误。
Reply_qs模型:
protected $table = 'reply_qs';
protected $fillable = ['reply'];
public function postqs(){
return $this->hasMany('App\Postqs');
}
postqs模型:
public function reply_qs(){
return $this->hasMany('App\Reply_qs');
}
存储功能:
public function store(Request $request){
$data = $request->all();
$postqs=($request->id);
$reply=Reply_qs::create($data);
$reply->postqs($id);
}
移民:
Schema::create('reply_qs', function (Blueprint $table) {
$table->increments('id')->unique();
$table->text('reply');
$table->timestamps('date');
});
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
Schema::table('reply_qs',function(Blueprint $table)
{
$table->integer('postqs_id')->unsigned();
$table->foreign('postqs_id')->references('id')->on('postqs') -
>onDelete('cascade')->onUpdate('cascade');
});
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
最佳答案
您的人际关系不正确。
您的Reply_qs模型应该与Postqs有这种关系
public function postqs()
{
return $this->belongsTo(Postqs::class);
}
您的商店功能看起来不正确,应该看起来像这样
public function store( Request $request )
{
$reply = new Reply_qs();
$reply->text = $request->get('text');
$reply->postqs_id = $request->get('postqs_id');
$reply->save();
}
在您的store方法中,您似乎正在尝试将父Postqs对象与Reply_qs关联。
你会这样做
$reply->associate($post);
您需要传递对象而不是ID
如果您仍在努力进行此双重检查,请确保外键正确匹配,则可能需要像这样实现关联
public function postqs()
{
return $this->belongsTo(Postqs::class, 'postqs_id', 'id);
}
关于mysql - SQLSTATE [23000]:违反完整性约束:1452无法添加或更新子行:外键约束失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46368606/