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; } }