Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete items from Laravel Session array

im trying to delete items from the Laravel Session Array, but with no luck so far.

I store my values in a Session array using the Session::push() method:

  Session::push('event_date_display', Input::get('event_date'));
  Session::push('event_start_display', Input::get('event_start'));
  Session::push('event_entry_display', Input::get('event_entry'));
  Session::push('event_end_display', Input::get('event_end'));

I can access the values like normal arrays:

        @for($i=0;$i<Session::get('dates');$i++)
          <tr>
            <td>{{ Session::get('event_date_display')[$i] }}</td>
            <td>{{ Session::get('event_start_display')[$i] }}</td>
            <td>{{ Session::get('event_entry_display')[$i] == '' ? '-' : Session::get('event_entry_display')[$i] }}</td>
            <td>{{ Session::get('event_end_display')[$i] == '' ? '-' : Session::get('event_end_display')[$i] }}</td>
            <td><a href="{{URL::route('termin-loeschen', $i)}}" class="del"><span class="icon-spam"></span>Loeschen {{ $i }}</a></td>
          </tr>
        @endfor

But I can't figure out how to delete them. I tried Session::forget('event_date_display')[$index], but this deletes the whole array. Then I tried looping and unsetting, which isn't working either. Any help is appreciated.

like image 415
Jakob Fuchs Avatar asked Jan 20 '14 19:01

Jakob Fuchs


2 Answers

When you call Session::forget('event_data_display')[$index], there is no point at which that $index variable gets passed into the forget() method. So Laravel won't see it, and will unset the entire 'event_data_display' index of the Session array.

To unset the value at that index, you'll probably need to do something like this:

$event_data_display = Session::get('event_date_display');
unset($event_data_display[$index]);
Session::set('event_data_display', $event_data_display);

Laravel's Session does support adding to arrays via a specified index like this:

Session::push('user.teams', 'developers');

So you might also be able to access that index of the array like so:

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

I haven't tried it but it's worth a shot.

When you call Session::get('event_data_display')[$i], the reason that works is because PHP retrieves the array value from Session::get('event_data_display') before it looks for the value stored at the $i index.

When you call Session::forget('event_data_display'), the forget() method can only act on what is passed to it.

like image 148
patricksayshi Avatar answered Oct 20 '22 01:10

patricksayshi


I solve it using the following code. Just pass the value that you want to delete in the array as an "id" to your controller like the code bellow

public function removeAddTocart(Request $request)
{
    $remove = ''.$request->id.'';

    if (Session::has('productCart'))
    {
        foreach (Session::get('productCart') as $key => $value) 
        {
            if ($value === $remove)
            {
                Session::pull('productCart.'.$key); // retrieving the value and remove it from the array
                break;
            }
        }
    }
}
like image 30
TheLastCodeBender Avatar answered Oct 20 '22 01:10

TheLastCodeBender