4

Here is the problem I have a session

session('products')

this is actually an array that contains id

session('products')
array:4 [▼
0 => "1"
1 => "2"
2 => "4"
3 => "1"
]

Now I want to delete lets say 4 How do I do that? I tried method

session()->pull($product, 'products');

But it didn't work!

Other solution

session()->forget('products', $product);

it also didn't work

Alen
  • 1,221
  • 5
  • 21
  • 43

3 Answers3

19

You AFAIR have to firstly retrieve whole array, edit it and then set it again. If you want to delete by product ID, which is as I assume an array value, you can use this: PHP array delete by value (not key)

$products = session()->pull('products', []); // Second argument is a default value
if(($key = array_search($idToDelete, $products)) !== false) {
    unset($products[$key]);
}
session()->put('products', $products);

Misunderstood question

Session::pull takes first parameter as the item do delete and second as the default value to return. You have mistaken the order of arguments. Try:

session()->pull('products'); // You can specify second argument if you need default value

As I can see in source, Session::forget expects string or array, so you should specify only the first parameter:

session()->forget('products');
Community
  • 1
  • 1
Albert221
  • 5,223
  • 5
  • 25
  • 41
5

This method isn't tested:

Session::forget('products.' . $i);

note the dot notation here, its worth the try. If that isnt working, you can always do this:

$products = Session::get('products'); // Get the array
unset($product[$index]); // Unset the index you want
Session::set('products', $products); // Set the array again
0

You can do it in the following way in case you have a function to delete an item from a cart

public function deleteProductoCart(Producto $producto) {
    $cart = \Session::get('products');
    unset($cart[$producto->id]);
    \Session::put('products', $cart);
    return redirect()->route('tu-ruta');
}
  • thanks for your attempt on answering the question. Stack Overflow [requires content to be in English](https://meta.stackexchange.com/a/13684). Please consider re-writing your answer in English. – atiquratik Sep 17 '21 at 16:37