2016-08-04 35 views
2

Ich habe Laravel-Anwendung und ich speichern Elemente in einem Korb mit der Sitzung.Laravel 5.1 - Entfernen von Artikel aus Array in Sitzung

Funktion, die Artikel in den Warenkorb

public function addItem($id) 
    { 
     session()->push('user.basket', $id); 
     return back(); 
    } 

Funktion ergänzt, die Artikel aus dem Warenkorb entfernt

public function removeItem($id) 
    { 
     session()->pull('user.basket', $id); 
     return back(); 
    } 

Wenn ich Elemente hinzufügen das funktioniert gut, aber wenn ich komme, um ein Element zu entfernen das ist im Korb der ganze Korb ist entfernt?

+0

http://stackoverflow.com/questions/21242401/delete-items-from-laravel-session-array –

+0

ist Ihre Anwendung unterstützt mehrere Elemente mit gleicher Speicherung ID im Warenkorb? –

Antwort

2

Die Methode session()->pull('key','default') entfernt den Artikel mit key und gibt den Wert default zurück, wenn dieser nicht existiert.

Es gibt keine Möglichkeit, direkt Element aus dem Array zu löschen, müssen Sie es implementieren:

$array = session()->pull('user.basket',[]); 
unset($array[$id]); 
session()->put('user.basket',$array); 
0

Wie Sie wahrscheinlich wissen, ein Array-Werte haben und jeder Wert hat einen Schlüssel (['key1' => 'value1']), der Wert könnte auch ein anderes Array sein. In Ihrem Beispiel haben Sie ein Array verwendet (user.basket), jeder Punkt repräsentiert eine neue Ebene des Arrays.

Entfernen von Wert

Sie schieben Sie Ihre ID an die Sitzung Array. Sie geben keinen Schlüssel an und erhalten daher einen unbekannten Schlüssel. Daher möchten Sie ihn mit einem Wert (Ihrer ID) entfernen. Die Variable $valueToRemove im Beispiel ist Ihre ID.

session()->put('user.basket', array_diff(session()->get('user.basket'), [$valueToRemove])); 

Um zu erklären: Ersetzen Sie die user basket mit allem, was in user basket, die nicht in der Anordnung ist, dass nur die $valueToRemove enthält.

Entfernen von Schlüssel

Können sagen, Sie kennen die, welche Taste (Position) Sie entfernen möchten, wenn Sie zum Beispiel Schleife foreach(session()->get('user.basket') as $key => $value) das Array werfen. Dann können Sie den spezifischen Schlüssel mit forget entfernen.

session()->forget('user.basket.'.$keyToRemove); // example: 'user.basket.7' 

Ihr Code

public function removeItem($id) 
{ 
    session()->put('user.basket', array_diff(session()->get('user.basket'), [$id])) 
    return back(); 
}