Yii ::如何使用CDbCriteria作为缓存依赖项

时间:2013-01-02 06:39:14

标签: php caching yii

当我们使用CDbCacheDependency定义缓存依赖项时,我们必须提供SQL作为依赖项。当我们使用CDbCriteria时,它不可能提供sql,因为sql是通过带有正确参数标记的critera构建的。

我们有什么办法可以将CDbCriteria用作缓存依赖项吗?问这样的事情是对的吗?因为我只对由CDbCriteria构建的sql感兴趣,所以我必须手动构建sql,我认为这是不对的。

谢谢

1 个答案:

答案 0 :(得分:3)

从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 

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


或者您可以使用Query Builder,但当然不会有CDbCriteria