Yii ExtendedActiveRecord 增强版 ActiveRecord 增加多数据库连接绑定功能

ExtendedActiveRecord 继承自 CActiveRecord,因此基础功能与 CActiveRecord 无异

为添加对多数据库连接的支持,增加了对 connectionName() 方法的回调,用法跟已有的 tableName() 方法一致,返回数据库连接组件名称的字符串。

如果不定义该方法,则使用默认数据库连接(db)

源码如下:

class ExtendedActiveRecord extends CActiveRecord
{
    public static $db = array();

    /**
     * @return CDbConnection
     * @throws CDbException
     */
    public function getDbConnection()
    {
        $componentName = $this->connectionName();
        if (isset(self::$db[$componentName])) {
            return self::$db[$componentName];
        } else {
            self::$db[$componentName] = Yii::app()->getComponent($componentName);
            if (self::$db[$componentName] instanceof CDbConnection)
                return self::$db[$componentName];
            else {
                $message = 'Active Record keyword requires a "' . $componentName . '" CDbConnection application component.';
                Yii::log($message, CLogger::LEVEL_ERROR, 'extended');
                throw new CDbException(Yii::t('yii', $message));
            }
        }
    }

    public function connectionName()
    {
        return 'db';
    }
}

 

实例:

class SomeModelClass extends ExtendedActiveRecord
{
    ......

    public function connectionName() {
        return 'some-db-connection';
    }

    ......
}

  

 

posted @ 2014-08-01 14:37  oShine.Q  阅读(342)  评论(0编辑  收藏  举报