/** * Do delete action, this method should be override by sub class. * * @param mixed $conditions Where conditions, you can use array or Compare object. * * @throws \Exception * @return boolean Will be always true. */ protected function doDelete(array $conditions) { $query = $this->db->getQuery(true); // Conditions. QueryHelper::buildWheres($query, $conditions); $query->delete($this->table); $this->db->transactionStart(true); try { $result = (bool) $this->db->setQuery($query)->execute(); } catch (\Exception $e) { $this->db->transactionRollback(true); throw $e; } $this->db->transactionCommit(true); return $result; }
/** * Method to roll back a transaction. * * @param boolean $toSavepoint If true, rollback to the last savepoint. * @return self Returns this object to support chaining. * * @throws \RuntimeException */ public function transactionRollback($toSavepoint = false) { if (version_compare($this->cmsRelease, '3.2', '>=')) { $this->_db->transactionRollback($toSavepoint); } else { if (!$toSavepoint || $this->transactionDepth <= 1) { if ($this->query('ROLLBACK')) { $this->transactionDepth = 0; } return $this; } $savepoint = 'SP_' . ($this->transactionDepth - 1); if ($this->query('ROLLBACK TO SAVEPOINT ' . $this->nameQuote($savepoint))) { $this->transactionDepth--; } } return $this; }
/** * transactionRollback * * @param bool $asSavePoint * * @return $this */ public function transactionRollback($asSavePoint = false) { $this->db->transactionRollback($asSavePoint); }