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

问题描述:

我有2个表(note_tag和tags)。当我想创建一个标签,我得到错误信息:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败

SQLSTATE [23000]:完整性约束违规:1452不能添加或更新子行,外键约束失败(prj_testnote_tag,约束note_tag_note_id_foreign外键。 (note_id)参考文献tagsid))(SQL:插入到note_tagnote_id,tag_id)值(3,1))。

Schema::create('tags', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 

    Schema::create('note_tag', function (Blueprint $table) { 
     $table->integer('note_id')->unsigned()->index(); 
     $table->foreign('note_id')->references('id')->on('tags'); 
     $table->integer('tag_id')->unsigned()->index(); 
     $table->foreign('tag_id')->references('id')->on('notes'); 
    }); 

NotesConroller

class NotesController extends Controller 

    { 
     public function store(Request $request, Card $card){ 

      $this->validate($request, [ 
       'body' => 'required|unique:notes|min:2' 
      ]); 

      $note = new Note($request->all()); 
      $note->user_id = 1; 
      $card->notes()->save($note); 

      $note->tags()->attach($request->input("tags")); 

      flash("Note is saved security.", "succes"); 
      return back(); 
     } 

     public function edit(Note $note){ 
      return view('notes.edit', compact('note')); 
     } 

     public function update(Note $note, Request $request){ 
      $note->update($request->all()); 
      return back(); 
     } 
    } 

show.blade.php

<div class="form-group"> 
    <select name="tags[]" title="tags" class="form-control" multiple="multiple"> 
     @foreach($tags as $tag) 
       <option value="{{ $tag ->id }}">{{ $tag->name }}</option> 
     @endforeach 
    </select> 
</div> 

Tag.php

public function notes(){ 
    return $this->belongsToMany(Note::class); 
} 

我似乎无法找到我做错了什么。显然外键有问题。

您错误地定义了您的外键。 note_id参考tags表和tag_idnotes表中的代码。

应该改为:

Schema::create('note_tag', function (Blueprint $table) { 
    $table->integer('note_id')->unsigned()->index(); 
    $table->foreign('note_id')->references('id')->on('notes'); 
    $table->integer('tag_id')->unsigned()->index(); 
    $table->foreign('tag_id')->references('id')->on('tags'); 
}); 

请确保您有tag_idnote_idfillable场在他们的模型...