Al_*_*Al_ 87 php laravel eloquent laravel-4
我有多对多的关系设置和工作,将项目添加到我使用的购物车:
$cart->items()->attach($item);
Run Code Online (Sandbox Code Playgroud)
这会将项目添加到数据透视表中(应该如此),但如果用户再次单击链接以添加他们已添加的项目,则会在数据透视表中创建重复项.
是否有内置的方法将记录添加到数据透视表只有一个尚不存在?
如果没有,我如何检查数据透视表以查找是否已存在匹配的记录?
Bar*_*vdh 242
您还可以使用该$model->sync(array $ids, $detaching = true)方法并禁用分离(第二个参数).
$cart->items()->sync([$item->id], false);
Run Code Online (Sandbox Code Playgroud)
更新:从Laravel 5.3或5.2.44开始,您还可以调用syncWithoutDetaching:
$cart->items()->syncWithoutDetaching([$item->id]);
Run Code Online (Sandbox Code Playgroud)
哪个完全相同,但更具可读性:)
Ale*_*ski 70
您可以通过编写一个非常简单的条件来检查现有记录的存在:
if (! $cart->items->contains($newItem->id)) {
$cart->items()->save($newItem);
}
Run Code Online (Sandbox Code Playgroud)
或者/并且您可以在数据库中添加unicity条件,它会在尝试保存doublet时抛出异常.
您还应该看看下面Barryvdh的更简单的答案.
| 归档时间: |
|
| 查看次数: |
42501 次 |
| 最近记录: |