如果ID相同,如何逐个删除项目?

时间:2016-07-08 08:28:49

标签: php laravel

我正在开发购物车,当我添加两个相同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();
}

1 个答案:

答案 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和文本组成,这两个应该唯一地标识产品。