テクニカル雑記帳です
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処理の後ろで何かやっても無意味!!!