Du kannst nicht mehr als 25 Themen auswählen
Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
|
- <?php
-
- namespace App\Util;
-
- use App\Features\InstanceAble;
- use Illuminate\Support\Facades\DB;
- use LogicException;
-
- class DBUtil
- {
- use InstanceAble;
-
- private bool $isBeginning = false;
-
- public function __destruct()
- {
- if ($this->isBeginning) {
- $this->rollBack();
- }
- }
-
- public function beginTransaction(): void
- {
- if ($this->isBeginning) {
- throw new LogicException("2重トランザクション開始検知");
- }
-
- DB::beginTransaction();
- $this->isBeginning = true;
- }
-
- public function commit(): void
- {
- if (!$this->isBeginning) {
- throw new LogicException("無効なコミット検知");
- }
- DB::commit();
- $this->isBeginning = false;
- }
-
- public function rollBack(): void
- {
- if (!$this->isBeginning) {
- throw new LogicException("無効なロールバック検知");
- }
-
- DB::rollBack();
- logs()->warning("ロールバック検知");
- $this->isBeginning = false;
- }
-
- public function isBeginning(): bool
- {
- return $this->isBeginning;
- }
- }
|