背景
LaravelではDB操作にPDOを利用しているが、
PDOのトランザクションメソッド(beginTransaction等)がSQLServerに対応していないので、
Laravel標準の
DB::transaction(function()
{
...
});
や、
DB::beginTransaction();
ではSQLServerのトランザクション管理ができない。
解決策
トランザクション処理のSQLを直接実行する。
サンプルコード
use DB;
use Exception;
try {
DB::connection('sqlsrv')->statement('BEGIN TRANSACTION');
...
DB::connection('sqlsrv')->statement('COMMIT TRANSACTION');
} catch (Exception $e) {
DB::connection('sqlsrv')->statement('ROLLBACK TRANSACTION');
}
参考