首页 文章

许多关系在laravel中存储和更新

提问于
浏览
3

我创建了三个表:

邮政表

ID - Headers - 体

标签表

ID - 名

post_tag

POST_ID - TAG_ID

Post Model

public function tags()
{
    return $this->belongsToMany('App\Tag');
}

标签模型

public function posts()
{
    return $this->belongsToMany('App\Post');
}

这是一对多关系

我想在更新帖子时添加新帖子和更新标签时存储标签,我使用bootstrap-tagsinput插件,添加帖子,我使用此方法存储新标签:

public function storeTags($post, $tags)
{
    $tagInputArr = explode(',', $tags);
    $tagArr = [];
    foreach ($tagInputArr as $tag) {
        $tagArr[] = new Tag(['name' => $tag]);
    }
    $post->tags()->saveMany($tagArr);
}

$ post是新的post对象,$ tags是来自$ request的标记字符串 .

对于更新帖子,我有一个问题,当我查看编辑帖子页面时,从数据库中选择默认标签,如果我想添加新标签,则storeTags方法不起作用 .

1 回答

  • 1

    尝试在 storeTags() 这样做

    $post->save();
    if (isset($request->tags)) {
        $post->tags()->sync($request->tags, false);
    } else {
        $post->tags()->sync(array());
    }
    

    updateTags()

    $post->save();
    if (isset($request->tags)) {
        $post->tags()->sync($request->tags);
    } else {
        $post->tags()->sync(array());
    }
    

    在你的标签的html文件中,使用它

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

    sync() 方法中更新不需要第二个参数 .
    我建议你watch整个标签创建播放列表

相关问题