【问题标题】:Duplicate entry in attach pivot table laravel附加数据透视表 laravel 中的重复条目
【发布时间】:2023-01-09 17:09:08
【问题描述】:

我收到这个错误

"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-7-8' for key 'cart_product_cart_id_product_id_price_id_unique' (SQL: insert into `cart_product` (`cart_id`, `created_at`, `price_id`, `product_id`, `quantity`, `updated_at`) values (2, 2023-01-09 12:23:57, 8, 7, 1, 2023-01-09 12:23:57))"


            $cart_product = $cart->products()->where('product_id', $product->id)->where('price_id', $price->id)->first();

if ($cart_product->structure == 'single') {
            $cart->products()->attach(array([
                'product_id' => $product->id,
                'quantity'   => $request->quantity,
                'price_id'   => $price->id
            ]));

        }

如何向表 product_cart 添加一行,尽管它已经存在

【问题讨论】:

  • 如果该条目已经存在,为什么要添加另一个?

标签: laravel


【解决方案1】:

如果存在,您可以执行更新。如果没有,请添加。 (更新或创建的基本概念)

if ($cart_product->structure == 'single') {
    if ($cart->products()->where('product_id', $product->id)->where('price_id', $price->id)->exists()) {
        // Update
        $cart->products()->updateExistingPivot($product->id, [
            'quantity' => $request->quantity,
            'price_id' => $price->id
        ]);
    } else {
        // Insert
        $cart->products()->attach(array([
            'product_id' => $product->id,
            'quantity'   => $request->quantity,
            'price_id'   => $price->id
        ]));
    }
}

【讨论】:

  • 如果产品结构单一,我只需要在数据透视表上创建一条新记录
  • 您的代码更新表格行
【解决方案2】:

如果您需要重复数据导致您需要更新一个元素

您可以使用 sync() 方法,例如:-


$cart->products->sync(array([
                'product_id' => $product->id,
                'quantity'   => $request->quantity,
                'price_id'   => $price->id
            ]));

sync() 表示如果退出将更新它,或者将创建新记录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多