2016-05-23 2 views
1

私はカートを構築しています。セッションを使用してゲストユーザーのデータを保存しています。ここにアイテムをどのように保管しているのですか?ゲストユーザが同じサイズでアイテムを追加した場合Laravel - セッション内のキーの値を変更するには

Session::push('cartItems', [ 
    'product' = > $product, 
    'size' = > $request['size'], 
    'quantity' = > $request['quantity'] 
]); 

はそれだけでcartItem['quantity']に選ばれた量を追加する必要があります。私は、同じサイズの製品はすでにそれがコード

if ($cartItem['size'] == $request['size']) { 
    $cartItem['quantity'] += (int) $request['quantity']; 
} 

しかしのその部分を通過するカート内に存在する場合、製品を追加しようとすると

foreach(Session::get('cartItems') as $cartItem) { 
    if ($cartItem['product'] - > id == $product_id) { 
     $isNewItem = false; 
     if ($cartItem['size'] == $request['size']) { 
      $cartItem['quantity'] += (int) $request['quantity']; 
     } else { 
      Session::push('cartItems', [ 
       'product' = > $product, 
       'size' = > $request['size'], 
       'quantity' = > $request['quantity'] 
      ]); 
     } 
    } 
} 

:ここで私はそれを行う方法です$cartItemの数量はまったく変更されません。どうすれば変更できますか?

+0

$ cartItem-> save();これが動作するかどうかを確認してください(ifをifに入れてください) –

+0

セッション配列を使用しているため、これは機能しません。 – Codearts

答えて

0

を私は、次の操作を行って、解決策を見つけた:

$cartItems = Session::get('cartItems', []); 
foreach ($cartItems as &$cartItem) { 
    if ($cartItem['product']->id == $product_id) { 
     $isNewItem = false; 
     if ($cartItem['size'] == $request['size']) { 
      $cartItem['quantity'] += (int)$request['quantity']; 
      $cartItem->save(); 
      Session::set('cartItems', $cartItems); 
     } else { 
      Session::push('cartItems', [ 
       'product' => $product, 
       'size' => $request['size'], 
       'quantity' => $request['quantity'] 
      ]); 
     } 
    } 
} 

私はいくつかの掘削を行うことによって、この解決策を見つけました。ここにはquestionがあります。

2

ループでは、$ cartItemは一時的なループ変数です。変更すると、セッション値に影響しません。つまり、サイズが等しい場合にセッションを更新していないということです。

Laravelには、既に使用している配列にプッシュする便利なメソッドpush()がありますが、残念ながら配列のupdateメソッドはありませんので、カート全体を取り出して必要に応じて更新し、再びそれを設定します。

$cartItems = Session::get('cartItems'); 
$newItems = [];  

foreach ($cartItems as $cartItem) { 
     if ($cartItem['product']->id == $product_id && $cartItem['size'] == $request['size']) { 
       $cartItem['quantity'] += (int)$request['quantity']; 
     } else { 
       $newItems[] = [ 
         'product' => $product, 
         'size' => $request['size'], 
         'quantity' => $request['quantity'] 
       ]; 
     } 
} 

Session::put('cartItems', $cartItems + $newItems); 
関連する問題