15-8
根據不同情況來進行新增品項或累加品項
- 按下「加入購物車」的按鈕,理論上就是把購物項目加入購物車而已。但是如果同一個商品按好幾次呢?難道要新增好幾筆相同資料?這顯然和一般常理不符。
- 通常,按一下就是加入購物車(如果購物車沒有該品項的話);若是再按一次,同常就是相同品項上,將數量再累積上去。
- 這個動作我們在控制器中來處理,因此,請開啟
\專案\app\Http\Controllers\CartController.php
編輯之:
public function store(CartRequest $request)
{
// 從資料庫中查詢該商品是否已經在購物車中,如果存在則直接疊加商品數量
if ($cart = $request->user()->carts()->where('product_id', $request->product_id)->first()) {
$cart->update([
'amount' => $cart->amount + $request->amount,
]);
} else {
// 否則創建一個新的購物車記錄
Cart::create($request->all());
}
return [];
}
-
$request->user()
就是目前送出此請求的使用者資料
-
$request->user()->carts()
則是因為User模型中,我們有設定carts()
關聯,可以順便帶出目前這個使用者購物車裡所有內容
-
$request->user()->carts()->where('product_id', $request->product_id)
則是將此使用者的購物車品項做利用商品編號篩選,只列出目前這個產品相關的資料即可。
-
$request->user()->carts()->where('product_id', $request->product_id)->first()
則是列出單筆資料,詳情可參考:https://learnku.com/docs/laravel/5.8/eloquent/3931
- 接著把原有資料表內容清空以便觀察是否運作正常:
- 按第一次加入購物車時:
- 再按一次相同品項的加入購物車按鈕,並重新整理畫面,就看到數量已經累加囉!
- 加入購物車的功能已經大功告成!