Перед прочтением этого материала рекомендуем вам ознакомиться со следующими материалами:

Транзакции могут быть использованы только в тех системах хранения данных, которые их поддерживают, например InnoDB. Все базовые таблицы Joomla CMS (начиная с версии 3) используют InnoDB, однако, разработчики сторонних расширений могут их не использовать.

Транзакции доступны для использования начиная с Joomla 3. Их поддержка осуществляется с помощью трех методов, которые реализуются в подклассах класса JDatabaseDriver:

  • transactionStart($asSavepoint = false)– стартовая точка транзакции. Если параметр $asSavepoint установлен в true и транзакция уже активна, то вместо начала транзакции будет создана точка сохранения.
  • transactionCommit($toSavepoint = false)– коммит транзакции. Если параметр $toSavepoint установлен в true, коммит будет произведен в последнюю точку сохранения.
  • transactionRollback($toSavepoint = false)– откат транзакции. Если параметр $toSavepoint установлен в true, откат будет произведен в последнюю точку сохранения.

Ниже приведен пример использования транзакции:

$db = JFactory::getDbo();
 
try
{
    $db->transactionStart();
 
    $query = $db->getQuery(true);
 
    $values = array(
        $db->quote('CONSTANT'),
        $db->quote('Some string'),
        $db->quote('Joomla is awesome!')
    );
 
    $query->insert($db->quoteName('#__some_table'));
    $query->columns(
        $db->quoteName(
            array(
                'constant',
                'string',
                'title'
            )
        )
    );
    $query->values(implode(',', $values));
 
    $db->setQuery($query)
        ->execute();
 
    $db->transactionCommit();
}
catch (Exception $e)
{
    $db->transactionRollback();
 
    JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error');
}

Все, что находится между методами transactionStart() и transactionCommit() не будет выполнено до тех пор, пока не будет вызван метод transactionCommit(). Если случится исключение, мы можем откатить все изменения с помощью метода transactionRollback().

Это позволяет нам вернуть базу данных к точке старта транзакции или к последней точке сохранения, несмотря на то, что мы уже внесли какие-то изменения в таблицы базы данных.

Транзкции в MySQL