如何使用CDbCriteria作为缓存依赖


Yii:: How to use CDbCriteria as cache dependency

当我们用CDbCacheDependency定义缓存依赖时,我们必须提供一个SQL作为依赖。当我们使用CDbCriteria时,不可能提供sql,因为sql是通过带有适当参数token的criteria构建的。

是否有任何方法我们可以使用CDbCriteria作为缓存依赖?这样问对吗?因为我只对CDbCriteria构建的sql感兴趣,其他我必须手动构建sql,我认为这是不对的。

谢谢

从Yii 1.1.13开始,恐怕您将必须使用SQL语句,并且没有直接使用CDbCriteria的方法。

然而有一个间接的方法使用CDbCriteria,但最终你将不得不使用它来生成一个SQL命令,你将把它作为你的依赖传递。该技术使用CDbCommandBuilder及其方法。

示例(参见注释以理解):

$criteria=new CDbCriteria;
// ... replace with code to set up your criteria ...
// ...
// first create commandBuilder instance
$commandBuilder = new CDbCommandBuilder(Yii::app()->db->schema);
// then create command using criteria
$command = $commandBuilder->createFindCommand('table_name', $criteria);
// then get sql statement text
$sql = $command->text;
// then set your dependency
$dependency = new CDbCacheDependency($sql);
// if you have params in the criteria, set the params for dependency
$dependency->params = $criteria->params;
// now your dependency is usable 

在上面我使用了createFindCommand,还有其他的方法,如CDbCommandBuilder中的createCountCommand,使用一个生成你必须运行的sql语句。


或者你可以使用查询生成器,但当然那里不会有任何CDbCriteria