在Laravel中为帖子添加标记时出现逻辑错误

时间:2017-08-19 07:02:43

标签: laravel tagging

我尝试在laravel中添加标签。这是更新代码:

findNextParens :: Int -> String -> Int
findNextParens 1 (')':str) = 1
findnextParens n (c:str)   = 1 + findNextParens n str
findNextParens n ('(':str) = 1 + findNextParens (n + 1) str
findNextParens n (')':str) = 1 + findNextParens (n - 1) str

它适用于数据透视表,这已经解决了。

我的问题在于标签表。当我删除所有标签并重新键入新标签或存在标签时,确定无效。

但是当我不更改或保留旧标签并继续添加新标签时会导致逻辑错误。它会自动将记录添加到标签表中。 例如:我的帖子有3个标签:test1,test2,test3。我保留它并添加一个标签:test4然后在表标签中自动添加标签:test2,test3,test4。

我的问题有解决方案吗?我哪里错了?我花了将近2天的时间。我不想用包。投票给答案有用。

2 个答案:

答案 0 :(得分:0)

首先,使用firstOrCreate,它简短方便。然后,不要分离,它是无用的,sync使得连接的标签就像数组tagIds一样,它会从数据透视表中删除不存在的元素并添加新元素。

此外,逗号和单词之间有空格,因此您需要trim

if ($request->tags) {
    $tagNames = explode(',', $request->tags);
    $tagIds = [];

    foreach ($tagNames as $tagName) {
        $tag = Tag::firstOrCreate(['name' => trim($tagName)]);
        $tagIds[] = $tag->id;
    }
    $post->tags()->sync($tagIds);
}

我想我已经理解了你的错误,就在这里

if ($tagCount < 1) {
    $tag = $post->tags()->create(['name' => $tagName]);
} else {
    $post->tags()->detach();
    $tag = Tag::where('name', $tagName)->first();
}

这意味着当您传递新标记时,它会删除帖子中的所有相关标记。如果您只传递旧标签,则不会删除它们。

答案 1 :(得分:0)

这是我的观点:

<input class="tagsinput" data-role="tagsinput" name="tags" value="
@foreach ($post->tags as $tag)
    {{ $tag->name }},
@endforeach">

我预先处理数据旧标记,因此当我不更改该匹配时,它会向表中添加标记。