【问题标题】:Laravel sync/attach tagsLaravel 同步/附加标签
【发布时间】:2016-12-30 12:28:24
【问题描述】:

我正在研究 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;

【问题讨论】:

    标签: php laravel tags


    【解决方案1】:

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

    $post->save();
    

    然后才使用attach()

    另外,$tagsarr 应该包含标签的 ID,而不是标签名称。

    【讨论】:

    • 这帮不了我。还是一样的结果。也没有 $post->save();
    • 所以,你应该先创建这些。你也应该有(创建或获取)帖子,然后才使用attach()
    • 您应该将标签保存到tags 表中并保存它们的ID。喜欢$tagIds[] = Tag::create($newTagData)->id;
    • firstOrCreate()方法。
    • firstOrCreate() 不是这样工作的。您应该通过将带有模型值的数组传递给firstOrCreate()来一一查找/创建标签。
    猜你喜欢
    • 2014-07-21
    • 2019-08-18
    • 2020-11-10
    • 1970-01-01
    • 2018-04-12
    • 2018-07-23
    • 2019-05-12
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多