代码之家  ›  专栏  ›  技术社区  ›  Hardist

Laravel First或创建副本

  •  2
  • Hardist  · 技术社区  · 7 年前

    在这个问题上找不到答案。我有一个 Many-to-Many 之间的关系 Expense Tag . 我有一个简单的表单,可以在其中输入一些标记,用逗号分隔。在我的 store 方法I执行以下操作:

    foreach(explode(",", $request->tags) as $tag)
    {
        $tags[] = auth()->user()->tags()->firstOrCreate(['name' => $tag])->id;
    }
    

    这将创建不存在的标记,并返回 tag_ids 所以我可以和我的 费用 .

    $expense->tags()->sync($tags); // Note, $expense is also created in my store method, ofcourse
    

    但我的问题是,它正在创建副本,我不知道为什么。不幸的是,网上找不到太多。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Hardist    7 年前

    找到了问题。似乎标签的名称前后都有空格。所以我需要在插入之前移除它们。

        2
  •  0
  •   killstreet    7 年前

    这听起来像是设置迁移和不正确执行验证的错误。

    1)在迁移中,您应该能够设置它,这样标签的名称只允许在表中输入一次。

    2)您应该检查或创建表单验证。既然你要选择或者创造一个记录,这将是一个小技巧,但它肯定是可以实现的。

    接下来,作为一个小提示,确保删除任何空白和小写的标签。这也将不允许相同的标签1中有2个是大写的,而另一个则完全是小写的。