transaction処理中の動きで変数が更新されず嵌った.(解決済み)
これ、try-catch中の変数の変化を取得できてないのかな?と思い検証.
{{-- blade --}} @if(session('message')) <ul class="list-group"> <li class="list-group-item list-group-item-success">{{ session('message') }}</li> </ul> @endif
//controller //成功チェック $success = false; try { DB::transaction(function () use ($success) { //登録処理 DB::insert($data); $success = true; }); } catch(Exception $e) { $success = false; } //成功メッセージの表示 if($success) { return redirect('cbt/user') ->with('message', '成功しました'); //ここが出力されない } else//TODO { return redirect('cbt/user') ->with('message', '予期せぬ状態'); //ここが出力される }
間違っていた箇所はフラグの変更位置.
DB::transaction(function () { //登録処理 DB::insert($data); }); $success = true; //transaction外でフラグを変更.
どうやら、transaction内部ではDBでの処理が完了し次第、スコープの外に出てしまうようです.
以下のような処理にしても、returnしてくれなかった.
DB::transaction(function () {
//登録処理
DB::insert($data);
return redirect('cbt/user')
->with('message', 'これはtransaction内からのredirectです');
});
まとめ
transactionメソッド中では、DB接続が終了し次第 exit
状態となるため、DB処理の後ろで何かやっても無意味!!!