SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败

时间:2017-09-22 15:49:52

标签: mysql laravel foreign-keys

我有reply_qs表和postqs table.Postqs_id是reply_qs表中的外键。当我试图将reply_qs表单数据保存在数据库中时,它显示了这个错误。

ERROR:

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或          更新a          子行:外键约束失败(fyp2reply_qs,CONSTRAINT         reply_qs_postqs_id_foreign外键(postqs_id)参考postqs         (id)ON DELETE CASCADE ON UPDATE CASCADE)(SQL:插入reply_qs        (replyupdated_atcreated_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;');

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);
}