Вход Регистрация
Файл: framework/db/CDbTransaction.php
Строк: 204
<?php
/**
 * CDbTransaction class file
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright 2008-2013 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

/**
 * CDbTransaction represents a DB transaction.
 *
 * It is usually created by calling {@link CDbConnection::beginTransaction}.
 *
 * The following code is a common scenario of using transactions:
 * <pre>
 * $transaction=$connection->beginTransaction();
 * try
 * {
 *    $connection->createCommand($sql1)->execute();
 *    $connection->createCommand($sql2)->execute();
 *    //.... other SQL executions
 *    $transaction->commit();
 * }
 * catch(Exception $e)
 * {
 *    $transaction->rollback();
 * }
 * </pre>
 *
 * @property CDbConnection $connection The DB connection for this transaction.
 * @property boolean $active Whether this transaction is active.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @package system.db
 * @since 1.0
 */
class CDbTransaction extends CComponent
{
    private 
$_connection=null;
    private 
$_active;

    
/**
     * Constructor.
     * @param CDbConnection $connection the connection associated with this transaction
     * @see CDbConnection::beginTransaction
     */
    
public function __construct(CDbConnection $connection)
    {
        
$this->_connection=$connection;
        
$this->_active=true;
    }

    
/**
     * Commits a transaction.
     * @throws CException if the transaction or the DB connection is not active.
     */
    
public function commit()
    {
        if(
$this->_active && $this->_connection->getActive())
        {
            
Yii::trace('Committing transaction','system.db.CDbTransaction');
            
$this->_connection->getPdoInstance()->commit();
            
$this->_active=false;
        }
        else
            throw new 
CDbException(Yii::t('yii','CDbTransaction is inactive and cannot perform commit or roll back operations.'));
    }

    
/**
     * Rolls back a transaction.
     * @throws CException if the transaction or the DB connection is not active.
     */
    
public function rollback()
    {
        if(
$this->_active && $this->_connection->getActive())
        {
            
Yii::trace('Rolling back transaction','system.db.CDbTransaction');
            
$this->_connection->getPdoInstance()->rollBack();
            
$this->_active=false;
        }
        else
            throw new 
CDbException(Yii::t('yii','CDbTransaction is inactive and cannot perform commit or roll back operations.'));
    }

    
/**
     * @return CDbConnection the DB connection for this transaction
     */
    
public function getConnection()
    {
        return 
$this->_connection;
    }

    
/**
     * @return boolean whether this transaction is active
     */
    
public function getActive()
    {
        return 
$this->_active;
    }

    
/**
     * @param boolean $value whether this transaction is active
     */
    
protected function setActive($value)
    {
        
$this->_active=$value;
    }
}
Онлайн: 3
Реклама