防止 Laravel 将多条记录添加到数据透视表

2021-12-26 00:00:00 php laravel laravel-4 eloquent

我建立了一个多对多的关系并且正在工作,将一个项目添加到我使用的购物车中:

I have a many to many relationship set up and working, to add an item to the cart I use:

$cart->items()->attach($item);

将项目添加到数据透视表(应该如此),但如果用户再次单击链接以添加他们已经添加的项目,则会在数据透视表中创建重复条目.

Which adds an item to the pivot table (as it should), but if the user clicks on the link again to add an item they have already added it creates a duplicate entry in the pivot table.

是否有一种内置的方法可以在数据透视表不存在的情况下将记录添加到数据透视表中?

Is there a built in way to add a record to a pivot table only if one does not already exist?

如果没有,我如何检查数据透视表以查找是否已存在匹配的记录?

If not, how can I check the pivot table to find if a matching record already exists?

推荐答案

您可以通过编写一个非常简单的条件来检查现有记录的存在,如下所示:

You can check the presence of an existing record by writing a very simple condition like this one :

if (! $cart->items->contains($newItem->id)) {
    $cart->items()->save($newItem);
}

或者/并且您可以在数据库中添加唯一性条件,它会在尝试保存双峰时抛出异常.

Or/and you can add unicity condition in your database, it would throw an exception during an attempt of saving a doublet.

您还应该看看下面来自 Barryvdh 的更直接的回答.

You should also take a look at the more straightforward answer from Barryvdh just below.

相关文章