SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败
问题描述:
我有2个表(note_tag和tags)。当我想创建一个标签,我得到错误信息:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败
SQLSTATE [23000]:完整性约束违规:1452不能添加或更新子行,外键约束失败(prj_test
note_tag
,约束note_tag_note_id_foreign
外键。 (note_id
)参考文献tags
(id
))(SQL:插入到note_tag
(note_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_id
notes
表中的代码。
应该改为:
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_id
和note_id
到fillable
场在他们的模型...