2016-07-08 11 views
1

私はショッピングカートを開発しています。同じIDの2つのアイテムを追加すると、そのアイテムの1つを削除するためにクリックすると、両方のアイテムが削除されます。それらを1つずつ削除するにはどうすればいいですか?私はLaravelと一緒に開発しています。IDが同じ場合、アイテムを1つずつ削除する方法は?

これは削除機能です:

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(); 
} 
+5

なぜ同じIDを持つ2つのアイテムがありますか.... ...? – Andrew

+0

2 ID-sの違いを定義する方法は? –

+0

これを解除した後に 'break'を実行すると、そのID **の最初の製品は削除されますが、**典型的なものは、同じIDの複数の製品ではなく、一意のIDと数量を持ちます。 (考えてみるだけのこと)。 – apokryfos

答えて

0

あなたはループを停止しないので、あなたはそのIDを持つすべての製品をINGのunsetを終了します。あなたも、私はあなたが削除する必要がある1上の具体的提案の項目に余分なテキストを追加している

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とテキストで構成されていますが、これらの2つは製品を一意に識別する必要があります。

+0

最初のオプションで完全に動作します。ありがとう:) – user3134037

関連する問題