防止 Laravel 向数据透视表添加多条记录
我有一个多对多的关系设置和工作,将一个项目添加到我使用的购物车:
$cart->items()->attach($item);
这会将项目添加到数据透视表中(应该如此),但是如果用户再次单击链接以添加他们已经添加的项目,则会在数据透视表中创建重复的条目。
是否有内置方法,仅当记录尚不存在时才向数据透视表添加记录?
如果没有,我如何检查数据透视表以查找匹配的记录是否已存在?
我有一个多对多的关系设置和工作,将一个项目添加到我使用的购物车:
$cart->items()->attach($item);
这会将项目添加到数据透视表中(应该如此),但是如果用户再次单击链接以添加他们已经添加的项目,则会在数据透视表中创建重复的条目。
是否有内置方法,仅当记录尚不存在时才向数据透视表添加记录?
如果没有,我如何检查数据透视表以查找匹配的记录是否已存在?
您还可以使用该方法并禁用分离(第二个参数)。$model->sync(array $ids, $detaching = true)
$cart->items()->sync([$item->id], false);
更新:从Laravel 5.3或5.2.44开始,您还可以调用syncWithoutDetaching:
$cart->items()->syncWithoutDetaching([$item->id]);
它的作用完全相同,但更具可读性:)
您可以通过编写一个非常简单的条件来检查现有记录的存在,如下所示:
if (! $cart->items->contains($newItem->id)) {
$cart->items()->save($newItem);
}
或者/您可以在数据库中添加单市条件,这将在尝试保存双精度时引发异常。
您还应该看看Barryvdh更直接的答案。