我有一个会话来保存laravel中的购物车信息,如下所示:
$item = [
'id' => 1,
'product_id' => 11
];
$item2 = [
'id' => 2,
'product_id' => 22
];
\Session::push('cart', $item);
\Session::push('cart', $item2);
现在我要删除$id=1
数组中的Item:
foreach(\Session::get('cart') as $cart)
{
if($id==$cart['id'])
{
echo 'done';
\Session::forget('cart.' . $i);
}
$i++;
}
它打印done
,但无法删除列表中的该项目。
我错了什么?
我也尝试\Session::pull('card.id', $id);
修改
dd(\Session::get('cart'))
array:4 [▼
2 => array:5 [▼
"id" => 1
"product_id" => "11"
]
3 => array:5 [▶]
4 => array:5 [▶]
5 => array:5 [▶]
]
所以我尝试将代码更改为:
foreach(\Session::get('cart') as $key->$cart)
{
if($id==$cart['id'])
{
\Session::forget('cart.' . $key);
}
}
但它也不能删除
答案 0 :(得分:1)
我非常确定cart.{$id}
不是会话密钥,因为您只是明确设置cart
,这是array
。这应该适合你:
$id = 1; // set from request, etc.
$cartSession = session()->get("cart");
foreach($cartSession AS $index => $cart){
if($index == $id){
unset($cartSession[$index]);
}
}
session()->put("cart", $cartSession);
基本上,您将会话拉到变量(array
),然后循环unset
$index
匹配$id
,然后设置剩余的array
回到"cart"
。
注意:我使用的是session()
而不是\Session
,这只是Facade vs全局函数;不应该对你使用哪个产生影响,除非低于某个Laravel版本(<*我相信)