我有reply_qs表和postqs table.Postqs_id是reply_qs表中的外键。当我试图将reply_qs表单数据保存在数据库中时,它显示了这个错误。
ERROR:
SQLSTATE [23000]:完整性约束违规:1452无法添加或 更新a 子行:外键约束失败(
fyp2
。reply_qs
,CONSTRAINTreply_qs_postqs_id_foreign
外键(postqs_id
)参考postqs
(id
)ON DELETE CASCADE ON UPDATE 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;');
答案 0 :(得分:0)
你们的关系不正确。
你的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();
}
在你的商店方法中,看起来你正试图将父Postqs对象与Reply_qs相关联。
你会这样做
$reply->associate($post);
您需要传递对象而不是id
如果您仍在努力进行此双重检查,您的外键正确匹配,您可能需要实现这样的关联
public function postqs()
{
return $this->belongsTo(Postqs::class, 'postqs_id', 'id);
}