我有reply_qs表和postqs表。postqs_id是reply_qs表中的外键。当我尝试将reply_qs表单数据保存在数据库中时,显示此错误。

错误:


  SQLSTATE [23000]:违反完整性约束:1452无法添加或
         更新一个
         子行:外键约束失败(fyp2reply_qs,CONSTRAINT
        reply_qs_postqs_id_foreign外键(postqs_id)参考postqs
        (id)在删除CASCADE时在更新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;');

最佳答案

您的人际关系不正确。

您的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/

10-10 06:41