You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何校验数据库记录是否存在,存在则增量更新数量否则新增

购物车项新增/数量自动递增功能实现方案

前端Angular端实现

  • 首先统一请求参数结构,需携带的必填字段为product_id(商品唯一标识)、qty(本次新增的商品数量),如果商品有多规格属性需额外携带sku_id
  • 发送POST请求示例代码:
// cart.service.ts
addCartItem(cartItem: {productId: number, qty: number, skuId?: number}) {
  return this.http.post('/api/cart/add', cartItem);
}
  • 注意不要在前端硬编码用户ID,用户身份校验由后端通过登录态完成,避免用户篡改请求操作他人购物车

后端Laravel端实现

Laravel提供了原生方法可以快速实现「存在则更新、不存在则新增」的逻辑,无需手动写exists判断。

1. 定义路由(routes/api.php)

Route::post('/cart/add', [CartController::class, 'addItem'])->middleware('auth:sanctum');

建议加auth中间件,从登录态取当前用户ID,避免非法操作

2. 控制器核心逻辑(app/Http/Controllers/CartController.php)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\CartItem;

class CartController extends Controller
{
    public function addItem(Request $request)
    {
        // 校验请求参数
        $validated = $request->validate([
            'product_id' => 'required|exists:products,id',
            'qty' => 'required|integer|min:1',
            'sku_id' => 'nullable|exists:skus,id'
        ]);

        // 以用户ID+商品ID+SKU ID为重复记录唯一判断条件
        $uniqueCondition = [
            'user_id' => auth()->id(),
            'product_id' => $validated['product_id'],
            'sku_id' => $validated['sku_id'] ?? null
        ];

        // 存在则累加数量,不存在则初始化新增
        $cartItem = CartItem::firstOrNew($uniqueCondition, ['qty' => 0]);
        $cartItem->qty += $validated['qty'];
        $cartItem->save();

        // 返回处理后的购物车数据供前端更新视图
        return response()->json([
            'code' => 200,
            'data' => $cartItem,
            'msg' => '添加成功'
        ]);
    }
}

高并发场景优化

如果遇到高并发添加购物车的场景,为了避免数量计算错误,可以改用原子操作实现:

// 先尝试更新已存在的记录
$updated = CartItem::where($uniqueCondition)->increment('qty', $validated['qty']);
// 没更新到说明记录不存在,执行新增
if (!$updated) {
    $cartItem = CartItem::create(array_merge($uniqueCondition, ['qty' => $validated['qty']]));
}

内容的提问来源于stack exchange,提问作者Bonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:57:04