carts()->active()->firstOrCreate([ 'status' => CartStatus::Active, ]); $price = Product::query()->whereId($cartData->productId)->value('actual_price'); $productInCart = $cart->products()->find($cartData->productId); if ($productInCart) { $newQuantity = $productInCart->pivot->quantity + $cartData->quantity; $cart->products()->updateExistingPivot($cartData->productId, [ 'quantity' => $newQuantity, 'price' => $price, ]); } else { $cart->products()->attach($cartData->productId, [ 'quantity' => $cartData->quantity, 'price' => $price, ]); } return CartDTO::fromModel($cart->load(['products' => function ($query) { $query->withPivot('quantity', 'price'); }])); } }