我在前端使用Select 2进行多标签选择,我正在使用Form模型绑定来打开Form。像这样:
<div class="form-group">
{!! Form::label('tags','Tags:') !!}
{!! Form::select('tags[]', $tags,null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!}
我的Js脚本部分是:
<script type="text/javascript">
$('#tag_list').select2({
'placeholder':'Choose Tags',
tags:true,
tokenSeparators:[",", " "],
createTag:function(newTag){
return{
id:'new:' + newTag.term,
text:newTag.term + '(new)'
};
}
});
</script>
在Controller中,我检查请求并在输入任何新标签时创建新标签,或者附加数据库中现有的选定标签。
if ( ! $request->has('tags'))
{
$article->tags()->detach();
return;
}
$alltags = array();
foreach ($request->input('tags') as $tag)
{
if (substr($tag, 0, 4) == 'new:')
{
$newTag = Tag::create(['name' => substr($tag, 4)]);
$alltags[] = $newTag->id;
//dd($newTag);
continue;
}
}
$article->tags()->attach($alltags);
$tags = DB::table('tags')->lists('name','tag_id');
$categories=DB::table('categories')->lists('category_name','category_id');
return view('admin.pages.edit', compact('article','tags','categories'));
虽然它确实保存了数据库中的所有新标签,但它并没有将标签附加到文章中。相反,它引发了一个例外:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`blogs`.`article_tag`, CONSTRAINT `article_tag_tag_id_foreign` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`tag_id`) ON DELETE CASCADE) (SQL: insert into `article_tag` (`post_id`, `tag_id`) values (16, ), (16, ), (16, ), (16, ))
我有三个表,一个文章表,另一个标签和另一个article_tag,并在文章和标签之间使用belongsToMany关系。 我不知道,我将如何处理这个问题,任何想法都将不胜感激。