Ich habe einen komplexen Datensatz in Sitzung gespeichert. Ich möchte Teile dieses Datensatzes in der Sitzung aktualisieren und anschließend die DB-Zeile mit den Sitzungsdaten aktualisieren. Bisher ist es mir gelungen, die gesamte Struktur und nicht nur den Teil davon zu überschreiben, den ich beabsichtige.Laravel Sitzungsvariable wird nicht aktualisiert
Beispiel:
base <-- whole record
base.field1 <-- single field
base.field2 <-- single field
base.field3 <-- single field
base.users <-- array of objects (users), stored as JSON column
base.details <-- single dimensional array of fields
base.cards <-- array of objects (cards), stored as JSON column
base.regions <-- array of objects (regions), stored as JSON column
Diese ganze Struktur wird als eine Zeile in einer progress
Tabelle gespeichert.
ich laden und speichern diese Daten in der Sitzung wie folgt aus:
session()->put('base', Progress::find($id));
ich dann einige der Felder in der Karten-Array aktualisiert:
$cards = session()->get('base.cards');
$cards[$index]['points'] = 100;
ich dann versuchen, (erfolglos) aktualisieren die Session-Variable, nachdem beide unten versucht:
session()->put('base.cards', $cards);
session()->push('base.cards', $cards);
session('base.cards', $cards);
Dann möchte ich diesen Datensatz in t speichern er Tabelle Fortschritt durch seine Instanz zu aktualisieren, wie folgt aus:
Progress::find($id)->update(session()->get('base'));
Wie manipulieren ich dann in der Sitzung aktualisieren nur eine der JSON/Array-Felder?
UPDATE: Ich fügte hinzu:
session()->put('base.cards', $cards);
session()->save();
Aber noch, wenn ich dd(session()->get('base'))
erhalte ich die $cards
Array ?!
tun Wo nennst du 'Session :: Speichern() 'in deiner App? – Tschallacka
Ich nicht. Muss ich? Taylors Dokumente erwähnen das nicht? – TheRealPapa
Ja, du musst. In der Regel wird am Ende Ihres Programmablaufs, wenn Ihre App beendet wird, normalerweise ein Aufruf von Session :: save() eingefügt. Dadurch wird sichergestellt, dass die Sitzungsdaten in den Sitzungstreiber geschrieben werden. – Tschallacka