包 | 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。 它是用来执行查询的数据库连接。
若查询结果(一个量)改变了,则认为该依赖项改变。 设置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)));
}
}