【问题标题】:How to delete items one by one if the ID is the same ?如果ID相同,如何逐个删除项目?
【发布时间】:2016-07-08 16:37:40
【问题描述】:

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

【问题讨论】:

  • 为什么你有2个相同id的项目......?
  • 你如何定义 2 个 ID 之间的差异?
  • 取消设置后执行break,这将删除具有该 ID 的第一个产品它通常具有唯一 ID 和数量,而不是具有相同 ID 的多个产品. (只是想一想)。
  • 嗯……店里有货。我可以在上面写文字。所以我可以在它们上面添加不同的文本。但它们的 id 与 DB 中的相同
  • 您必须找到一种方法将它们插入到具有不同 ID-s 的数据库中,因为您将面临这个问题

标签: php laravel


【解决方案1】:

由于您不停止循环,因此您最终会unseting 所有具有该 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和文本组成,这两个应该唯一标识产品。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2017-12-03
    相关资源
    最近更新 更多