あなたが閉鎖に使用している場合は、のように:
DB::transaction(function() {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
あなたは、フレームワークの内部でこのコードを実行します:
public function transaction(Closure $callback)
{
$this->beginTransaction();
// We'll simply execute the given callback within a try/catch block
// and if we catch any exception we can rollback the transaction
// so that none of the changes are persisted to the database.
try {
$result = $callback($this);
$this->commit();
}
// If we catch an exception, we will roll back so nothing gets messed
// up in the database. Then we'll re-throw the exception so it can
// be handled how the developer sees fit for their applications.
catch (Exception $e) {
$this->rollBack();
throw $e;
} catch (Throwable $e) {
$this->rollBack();
throw $e;
}
return $result;
}
ので、目にその場合、トランザクションがロールバックされることを100%確信しています。あなたはDB::beginTransaction();
とのトランザクションを手動で開くと、それはあなたのような何かを確認していない限り、ロールバックしようとしていることを確認しする方法はありません。
try {
DB::beginTransaction();
//do something
DB::commit();
} catch (\Exception $e) {
DB::rollback();
}
あなたがキャッチせずに例外をスローした場合、スクリプトが死ぬかで終わりますトランザクションを開いて、PDOは自動的に(http://php.net/manual/en/pdo.transactions.php)をロールバックします:
スクリプトが終了した場合や、接続があなたが優秀なトランザクションを持っている場合、PDOはそれを自動的にロールバックされます、閉じれようとしているとき。
ありがとうございました。それはトランザクションを保持し、何らかのクリーンアッププロセスを持っていますか? – timbroder
スクリプトは、スクリプトの実行が終了するまで開いたままにします。その時点で、そのトランザクションを終了/破棄するクリーンアッププロセスが実行されます。そのため、例外がスローされたときにトランザクションを明示的にロールバックすることを推奨しました。 – Devon
Db :: commitを使用して、成功した場合に何かをエコーすることができます –