如何在不创建副本的情况下增加 laravel 模型的数量
How to increment quantity of laravel model without creating a copy
我正在尝试在 laravel 中创建购物车系统,在该系统中选择菜单上的项目会将其添加为购物车项目。如果该商品已存在于购物车中,则应增加数量。我几乎完全可以工作,除了我已经制定的解决方案使得在需要增加数量的情况下,它还会重新创建购物车项目,这样就有一个有和没有增加的数量.我已经投入了大量精力来解决这个问题,并希望有人能够提供帮助。这是控制器中用于创建购物车项目的相关代码。
$cartItems = Cartitem::all();
if($cartItems->isEmpty()){
$cartItem = new Cartitem([
'name' => $request->name,
'image_url' => $request->image_url,
'description' => $request->description,
'price' => $request->price,
'quantity' => 1
]);
$cartItem->save();
} else {
forEach($cartItems as $item){
if($request->name != $item->name){
$cartItem = new Cartitem([
'name' => $request->name,
'image_url' => $request->image_url,
'description' => $request->description,
'price' => $request->price,
'quantity' => 1
]);
$cartItem->save();
} else {
++$item->quantity;
$item->save();
}
}
}
$oldItem = Cartitem::where('name', $request->name)->first();
if ($oldItem) {
$oldItem->increment('quantity');
}
else {
$newItem = new Cartitem([
'name' => $request->name,
'image_url' => $request->image_url,
'description' => $request->description,
'price' => $request->price,
'quantity' => 1
]);
$newItem->save();
}
我正在尝试在 laravel 中创建购物车系统,在该系统中选择菜单上的项目会将其添加为购物车项目。如果该商品已存在于购物车中,则应增加数量。我几乎完全可以工作,除了我已经制定的解决方案使得在需要增加数量的情况下,它还会重新创建购物车项目,这样就有一个有和没有增加的数量.我已经投入了大量精力来解决这个问题,并希望有人能够提供帮助。这是控制器中用于创建购物车项目的相关代码。
$cartItems = Cartitem::all();
if($cartItems->isEmpty()){
$cartItem = new Cartitem([
'name' => $request->name,
'image_url' => $request->image_url,
'description' => $request->description,
'price' => $request->price,
'quantity' => 1
]);
$cartItem->save();
} else {
forEach($cartItems as $item){
if($request->name != $item->name){
$cartItem = new Cartitem([
'name' => $request->name,
'image_url' => $request->image_url,
'description' => $request->description,
'price' => $request->price,
'quantity' => 1
]);
$cartItem->save();
} else {
++$item->quantity;
$item->save();
}
}
}
$oldItem = Cartitem::where('name', $request->name)->first();
if ($oldItem) {
$oldItem->increment('quantity');
}
else {
$newItem = new Cartitem([
'name' => $request->name,
'image_url' => $request->image_url,
'description' => $request->description,
'price' => $request->price,
'quantity' => 1
]);
$newItem->save();
}