如何在Laravel 5中附加带有文章的标签?

时间:2016-03-13 12:40:46

标签: php laravel eloquent laravel-5.1

我在前端使用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关系。 我不知道,我将如何处理这个问题,任何想法都将不胜感激。

0 个答案:

没有答案