Laravel同步/附加标签

时间:2016-12-30 12:28:25

标签: php laravel tags

我正在开发Laravel上的标记功能,并继续这个很棒的教程:https://laracasts.com/series/laravel-5-fundamentals/episodes/22?autoplay=true

但我有同步/附加功能的问题。 当我尝试附加时,它只更新了post_tag表,而不是标签表。 然后所有帖子都指向id为0的非现有标签。

保存似乎是:

...
if ($request->get('tags')) {
    $tagsarr = array_slice(array_unique($request->get('tags')), 0, (int)siteSettings('tagsLimit'));
    $post->tags()->attach($tagsarr);
}
    $post->save();

    return $post;

当我 dd($ tagsarr); 我有:

array:3 [▼
  0 => "tag1"
  1 => "tag2"
  2 => "tag3"
]

帮助我改变代码之后:

...
$post->save();

    if ($request->get('tags')) {
        $tagsarr = array_slice(array_unique($request->get('tags')), 0, (int)siteSettings('tagsLimit'));
        $tagIds[] = Tag::firstOrCreate($tagsarr)->id;

        $post->tags()->attach($tagIds);
    }

    return $post;

解决方案:

$post->save();

    if ($request->get('tags')) {
        $tagsarr = array_slice(array_unique($request->get('tags')), 0, (int)siteSettings('tagsLimit'));

        foreach($tagsarr as $tagitem) {
            $tagIds[] = Tag::firstOrCreate(['tag' => $tagitem])->id;
        }

        $post->tags()->attach($tagIds);
    }

    return $post;

1 个答案:

答案 0 :(得分:2)

attach()不应对tags表做任何事情。如果您要创建新帖子,则应首先保存对象:

$post->save();

然后才使用attach()

此外,$tagsarr应包含标记的ID,但不包含标记名称。