包 | 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 |
公共方法
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
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)));
}
}