我正在开发购物车,当我添加两个相同ID的项目时,当我点击删除其中一个时,它会删除这两个项目。如何逐个删除它们?我正在和Laravel一起开发。
这是删除功能:
public function delete(Request $request, $id)
{
$products = session('cart');
foreach ($products as $key => $value)
{
if ($value['id'] == $id)
{
unset($products [$key]);
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
答案 0 :(得分:0)
由于您没有停止循环,因此您最终会unset
使用该ID的所有产品。执行以下操作:
public function delete(Request $request, $id)
{
$products = session('cart');
foreach ($products as $key => $value) {
if ($value['id'] == $id) {
unset($products [$key]);
break;
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
但是,由于您还要在项目上添加额外的文字,我建议您更具体地说明您需要删除哪一项:
public function delete(Request $request, $id, $text)
{
$products = session('cart');
foreach ($products as $key => $value) {
if ($value['id'] == $id && $value['text'] == $text) {
unset($products[$key]);
break;
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
第二个建议只是我的猜测。这个想法是你的真实项$id
由数据库ID和文本组成,这两个应该唯一地标识产品。