所以我正在构建一个购物车,我正在使用Session为访客用户存储数据。这是我存储项目的方式。
Session::push('cartItems', [
'product' = > $product,
'size' = > $request['size'],
'quantity' = > $request['quantity']
]);
如果访客用户添加了相同大小的项目,则只应将所选数量添加到cartItem['quantity']
。我是这样做的:
foreach(Session::get('cartItems') as $cartItem) {
if ($cartItem['product'] - > id == $product_id) {
$isNewItem = false;
if ($cartItem['size'] == $request['size']) {
$cartItem['quantity'] += (int) $request['quantity'];
} else {
Session::push('cartItems', [
'product' = > $product,
'size' = > $request['size'],
'quantity' = > $request['quantity']
]);
}
}
}
当我尝试在购物车中已经存在相同尺寸的产品时添加产品时,它会通过代码的那一部分
if ($cartItem['size'] == $request['size']) {
$cartItem['quantity'] += (int) $request['quantity'];
}
但$cartItem
的数量根本没有变化。我怎样才能改变它?
答案 0 :(得分:2)
在你的循环中,$ cartItem是一个临时循环变量 - 改变它不会影响会话值。或者换句话说,当尺寸相等时,您不会更新会话。
Laravel有一个方便的方法push()用于推送到数组 - 你已经使用它了,但不幸的是没有数组"更新"方法,所以你需要获取整个购物车,根据需要更新它,然后再次设置:
objMyConn.ConnectionString = "Provider=sqloledb; Data Source=" & range("B2").value & "; Initial Catalog=" & range("B3").value &"; Integrated Security=SSPI;"
答案 1 :(得分:0)
我通过以下方式找到了解决方案:
$cartItems = Session::get('cartItems', []);
foreach ($cartItems as &$cartItem) {
if ($cartItem['product']->id == $product_id) {
$isNewItem = false;
if ($cartItem['size'] == $request['size']) {
$cartItem['quantity'] += (int)$request['quantity'];
$cartItem->save();
Session::set('cartItems', $cartItems);
} else {
Session::push('cartItems', [
'product' => $product,
'size' => $request['size'],
'quantity' => $request['quantity']
]);
}
}
}
我通过做一些挖掘找到了这个解决方案。这是question。