⚙️

【Laravel】多重連想配列のセッションデータの特定のkeyに対応するvalueを更新する方法

2021/12/01に公開

はじめに

あまりググっても出てこなかった方法なので、残しておきます。
この選択肢があればセッションの扱える幅が広がると思います。

仮のセッションデータ

例えばcartDataというキーに紐づいたセッションデータがあるとします。

取得

// Requestインスタンスを使用する場合
$request->session()->get('cartData');

// ヘルパー関数を使用する場合
session()->get('cartData');

// ファサードを使用する場合
Session::get('cartData');

内容

[
    [0] => [
        'item_name' => 'ジャケット',
        'item_count' => 1,
    ],
    [1] => [
        'item_name' => '靴下',
        'item_count' => 3,
    ],
    [2] => [
        'item_name' => 'バッグ',
        'item_count' => 2,
    ],
]

実現したいこと

靴下の個数を3 → 5個にしたい!

[1] => [
    'item_name' => '靴下',
    'item_count' => 3, // 5にしたい
],

セッションの特定のkeyに対応するvalueを更新する方法

以下のコードで更新できる。

// Requestインスタンスを使用する場合
$request->session()->put('cartData.1.item_count', 5);

// ヘルパー関数を使用する場合
session()->put('cartData.1.item_count', 5);

// ファサードを使用する場合
Session::put('cartData.1.item_count', 5);

put()の第1引数に連想配列の階層を文字列連結することで特定のkeyのvalueにアクセスすることができる。

config()と同じ感じですね

さいごに

ドキュメントにも明確には記載されていなかった...

Laravel 6.x HTTPセッション

Discussion