未能找到关于该答案的答案。我在Many-to-Many
和Expense
之间建立了Tag
关系。我有一个简单的表单,可以在其中输入一些标签,并用逗号分隔。在我的store
方法中,执行以下操作:
foreach(explode(",", $request->tags) as $tag)
{
$tags[] = auth()->user()->tags()->firstOrCreate(['name' => $tag])->id;
}
这将创建不存在的标签,并返回tag_ids
的数组,以便我可以将其与我的Expense
同步。
$expense->tags()->sync($tags); // Note, $expense is also created in my store method, ofcourse
但是我的问题是,它正在创建重复项,我不知道为什么。不幸的是,网上找不到很多东西。
答案 0 :(得分:0)
发现了问题。标签名称之前或之后似乎都有空格。因此,我需要在插入之前将其删除。
答案 1 :(得分:0)
这听起来像是设置迁移且未正确进行验证的错误。
1)在迁移过程中,您应该可以对其进行设置,以便仅在表中输入一次标签名称。
2)您应该检查或创建表单验证。现在,由于您正在选择或创建记录,这将有些麻烦,但是肯定可以实现。
在此旁边提供一些提示,请确保删除所有空格并将标签小写。这也将禁止两个相同的标签1具有大写字母,而另一个则完全小写。