2017-09-22 10 views
0

reply_qsテーブルとpostqsテーブルがあります.postqs_idはreply_qsテーブルの外部キーです。reply_qsフォームを保存しようとしました。データベース内のデータは、このエラーを示しました。SQLSTATE [23000]:整合性制約違反:1452子行を追加または更新できません。外部キー制約が失敗します

ERROR:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (fyp2 . reply_qs , CONSTRAINT reply_qs_postqs_id_foreign FOREIGN KEY (postqs_id) REFERENCES postqs (id) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into reply_qs (reply , updated_at , created_at) values (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); 
} 
+0

あなたのコードを試した後にこのエラーが発生しました。整合性制約違反:1048列 'postqs_id'はnullにはできません(SQL:reply_qs( 'reply'、' postqs_id'、 'updated_at'、' created_at')値に挿入します(saann、、2017-09-22 16:44 :11,2017-09-22 16:44:11)) – kavi

関連する問題