我正在开发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;
答案 0 :(得分:2)
attach()
不应对tags
表做任何事情。如果您要创建新帖子,则应首先保存对象:
$post->save();
然后才使用attach()
。
此外,$tagsarr
应包含标记的ID,但不包含标记名称。