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

2022-08-30 07:13:34

我有一个多对多的关系设置和工作,将一个项目添加到我使用的购物车:

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

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

是否有内置方法,仅当记录尚不存在时才向数据透视表添加记录?

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


答案 1

您还可以使用该方法并禁用分离(第二个参数)。$model->sync(array $ids, $detaching = true)

$cart->items()->sync([$item->id], false);

更新:从Laravel 5.3或5.2.44开始,您还可以调用syncWithoutDetaching:

$cart->items()->syncWithoutDetaching([$item->id]);

它的作用完全相同,但更具可读性:)


答案 2

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

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

或者/您可以在数据库中添加单市条件,这将在尝试保存双精度时引发异常。

您还应该看看Barryvdh更直接的答案。


推荐