middleware('user.auth')->only('store', 'destroy'); } /** * 显示购物车列表 * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 返回购物车视图 */ public function index() { $cars = collect(); // 初始化购物车集合 /** * @var $user User */ // 获取当前登录用户的购物车 if ($user = \auth()->user()) { // 直接获取当前用户的购物车及其关联的产品 $cars = $user->cars()->with('product')->get(); } // 返回购物车视图,并传递购物车数据 return view('cars.index', compact('cars')); } /** * 添加商品到购物车 * * @param Request $request 请求对象 * @return array 返回操作结果 */ public function store(Request $request) { /** * @var $car Car * @var $product Product * @var $user User */ // 根据产品 UUID 查找产品 $product = Product::query()->where('uuid', $request->input('product_id'))->firstOrFail(); // 获取当前用户 $user = auth()->user(); // 查找或新建购物车记录 $car = $user->cars()->firstOrNew([ 'user_id' => \auth()->id(), 'product_id' => $product->id ]); // 处理购物车数量变化 $change = 0; // 数量变化 $number = $request->input('number', 1); // 获取请求中的数量,默认为 1 if ($request->input('action') == 'sync') { // 如果是同步操作,直接设置数量 $change = $number - $car->number; $car->number = $number; } else { // 否则,增加数量 $car->number += $number; } // 检查库存是否足够 if ($car->number > $product->count) { return responseJson(403, '库存不足'); // 返回库存不足的响应 } // 保存购物车记录 $car->save(); // 返回成功响应 return responseJson(200, '加入购物车成功', compact('change')); } /** * 从购物车中删除商品 * * @param $id 购物车项的 ID * @return array 返回操作结果 */ public function destroy($id) { try { /** * @var $user User */ // 获取当前用户 $user = auth()->user(); // 查找购物车项并删除 $car = $user->cars()->whereKey($id)->firstOrFail(); $car->delete(); } catch (\Exception $e) { // 捕获异常并返回错误响应 dd($e); // 可选:调试输出异常信息 return responseJson(500, '服务器异常,请稍后再试'); } // 返回成功响应 return responseJson(200, '删除成功'); } }