はじめに
他と同じようにセッションへ保存のコードを書いているにも関わらず、
セッションが保存されない!!!
その原因がトランザクションにありました。
原因不明で悩みましたので、記事にさせていただきます。
参考になりましたら幸いです。
問題
Laravelにて、以下の通り記載しているにも関わらず、セッションに保存されない
DB::beginTransaction();
-省略-
$request->session()->put('errorMessage', $errorMessage);
原因
データベーストランザクションがセッションに影響を与えていました。
解決方法
DB::beginTransaction();
-省略-
DB::rollBack(); //解決策①
$request->session()->put('errorMessage', $errorMessage);
DB::commit(); //解決策②
トランザクションをしっかり終了させると想定通り動きました👏
ちなみに、Chat GPTに「何が原因やと思う?」と質問したところ解決しました。
AI、素晴らしいです。
原因詳細
私の使用環境では、Laravelがデータベースをセッションドライバとして使用していました。
その場合は、セッションデータの保存もデータベーストランザクションの一部として扱われます。
今回の場合、トランザクションがコミットされなかったために、セッションデータの保存も未決定状態となっていました。
ちなみに、セッションドライバはこちらから確認可能です。
.env
'driver' => env('SESSION_DRIVER', 'file'),