> YII 类库手册 > CDbCacheDependency
system.caching.dependencies
继承 class CDbCacheDependency » CCacheDependency » CComponent
实现 ICacheDependency
源自 1.0
版本 $Id: CDbCacheDependency.PHP 3204 2011-05-05 21:36:32Z alexander.makarow $
源码
CDbCacheDependency指基于sql语句查询结果的依赖项。

若查询结果(一个量)改变了,则认为该依赖项改变。 设置sql属性以指定SQL语句。 connectionID属性指定了CDbConnection应用组件的ID。 它是用来执行查询的数据库连接。

公共属性

属性 类型 描述 定义在
connectionID string CDbConnection应用组件的ID。默认是‘db’。 CDbCacheDependency
dependentData mixed 用以决定依赖项是否被改变的数据。 这些数据是可用的在evaLuateDependency被调用后。 CCacheDependency
hasChanged boolean 依赖项是否被改变。 CCacheDependency
params array 绑定到sql指定的SQL语句的参数(名=>值)。 CDbCacheDependency
sql string SQL语句,它的查询结果用来决定依赖项是否被改变。 注意,该SQL语句应该返回一个单一的值。 CDbCacheDependency

受保护属性

属性 类型 描述 定义在
dbConnection CDbConnection 数据库连接实例。 CDbCacheDependency

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造器。 CDbCacheDependency
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 CComponent
__set() 设置一个组件的属性值。 CComponent
__sleep() PHP的魔术方法sleep。 CDbCacheDependency
__unset() 设置一个组件的属性为null。 CComponent
asa() 返回这个名字的行为对象。 CComponent
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
evaluateDependency() 根据依赖关系来生存和保存数据以计算依赖项。 CCacheDependency
evaluateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
getDependentData() 返回用以决定依赖项是否被改变的数据。 这些数据是可用的在evaluateDependency被调用后。 CCacheDependency
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getHasChanged() 返回依赖项是否被改变。 CCacheDependency
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
raiseEvent() 发起一个事件。 CComponent

受保护方法

方法 描述 定义在
generateDependentData() 生成决定依赖项是否被改变需要的数据。 CDbCacheDependency
getDbConnection() 返回数据库连接实例。 CDbCacheDependency

属性详细

connectionID 属性
public string $connectionID;

CDbConnection应用组件的ID。默认是‘db’。

dbConnection 属性 只读
protected CDbConnection getDbConnection()

数据库连接实例。

params 属性 (可用自 v1.1.4)
public array $params;

绑定到sql指定的SQL语句的参数(名=>值)。

sql 属性
public string $sql;

SQL语句,它的查询结果用来决定依赖项是否被改变。 注意,该SQL语句应该返回一个单一的值。

方法详细

__construct() 方法
public void __construct(string $sql=NULL)
$sql string SQL语句,它的查询结果用来决定依赖项是否被改变。
public function __construct($sql=null)
{
    
$this->sql=$sql;
}

构造器。

__sleep() 方法
public array __sleep()
{return} array
public function __sleep()
{
    
$this->_db=null;
    return 
array_keys((array)$this);
}

PHP的魔术方法sleep。 该方法保证数据库实例是null,因为它包含了资源句柄。

generateDependentData() 方法
protected mixed generateDependentData()
{return} mixed 决定依赖项是否被改变需要的数据。
protected function generateDependentData()
{
    if(
$this->sql!==null)
    {
        
$db=$this->getDbConnection();
        
$command=$db->createCommand($this->sql);
        if(
is_array($this->params))
        {
            foreach(
$this->params as $name=>$value)
                
$command->bindValue($name,$value);
        }
        if(
$db->queryCachingDuration>0)
        {
            
// temporarily disable and re-enable query caching
            
$duration=$db->queryCachingDuration;
            
$db->queryCachingDuration=0;
            
$result=$command->queryRow();
            
$db->queryCachingDuration=$duration;
        }
        else
            
$result=$command->queryRow();
        return 
$result;
    }
    else
        throw new 
CException(Yii::t('yii','CDbCacheDependency.sql cannot be empty.'));
}

生成决定依赖项是否被改变需要的数据。 该方法返回全局状态的值。

getDbConnection() 方法
protected CDbConnection getDbConnection()
{return} CDbConnection 数据库连接实例。
protected function getDbConnection()
{
    if(
$this->_db!==null)
        return 
$this->_db;
    else
    {
        if((
$this->_db=Yii::app()->getComponent($this->connectionID)) instanceof CDbConnection)
            return 
$this->_db;
        else
            throw new 
CException(Yii::t('yii','CDbCacheDependency.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.',
                array(
'{id}'=>$this->connectionID)));
    }
}