【发布时间】:2018-01-27 20:28:05
【问题描述】:
我尝试在 laravel 中为帖子添加标签。这是更新代码:
public function update(PostRequest $request, $id)
{
$post = Post::find($id);
$post->update($request->all());
if ($request->tags) {
$tagNames = explode(',', $request->tags);
$tagIds = [];
foreach ($tagNames as $tagName) {
$tagCount = Tag::where('name', '=', $tagName)->count();
if ($tagCount < 1) {
$tag = $post->tags()->create(['name' => $tagName]);
} else {
$post->tags()->detach();
$tag = Tag::where('name', $tagName)->first();
}
$tagIds[] = $tag->id;
}
$post->tags()->sync($tagIds);
}
return back()->with('success', 'Successfully');
}
它与数据透视表配合得很好,这个问题已经解决了。
我的问题在于标签表。当我删除所有标签并重新输入新标签或现有标签时,就可以了。
但是当我不更改或保留旧标签并继续添加新标签时会导致逻辑错误。它会自动将记录添加到标签表中。 例如:我的帖子有 3 个标签:test1、test2、test3。我保留它并添加一个标签:test4 然后在表格标签中自动添加标签:test2,test3,test4。
我的问题有解决方案吗?我哪里错了?我花了将近2天的时间。我不想使用包。为有用的答案投票。
【问题讨论】:
-
是多对多吗?为什么要拆标签?无论如何它都会
sync。 -
是的,这是多对多。我该怎么办?
-
我很好奇我是否正确理解了这个错误。请描述一下,你的代码有什么问题?是标签表输入错误还是关系错误?