セッションに複雑なレコードが格納されています。セッションでこのレコードの一部を更新し、DB行をセッションデータで更新します。これまでのところ、私は意図していた部分だけでなく構造全体を上書きすることができました。Laravelセッション変数が更新されていません
例:
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
この全体構造はprogress
テーブル内の行として格納されます。
私はこのようなセッションでこのデータをロードし、格納します。
session()->put('base', Progress::find($id));
私は、カードの配列内のフィールドのいくつかの更新:
$cards = session()->get('base.cards');
$cards[$index]['points'] = 100;
を私はその後、更新するために、(失敗した)してみてくださいセッション変数は、以下の両方を試しました:
session()->put('base.cards', $cards);
session()->push('base.cards', $cards);
session('base.cards', $cards);
最後に、このレコードをt
Progress::find($id)->update(session()->get('base'));
JSON /配列フィールドの1つだけをセッションで更新するにはどうすればよいですか?
UPDATE:私は、コメントを追加しました:
session()->put('base.cards', $cards);
session()->save();
しかし、それでもまだ、私は$cards
配列を取得dd(session()->get('base'))
とき!
を行うことができます::あなたのアプリにsave() '? – Tschallacka
私はしません。しなければならない? Taylorのドキュメントではこれについて言及していませんか? – TheRealPapa
はい、する必要があります。通常、プログラムの終了時に、アプリケーションが終了するときには、通常、Session :: save()の呼び出しが含まれます。これにより、セッションデータがセッションドライバに書き込まれることが確認されます。 – Tschallacka