当我们使用CDbCacheDependency定义缓存依赖项时,我们必须提供SQL作为依赖项。当我们使用CDbCriteria时,它不可能提供sql,因为sql是通过带有正确参数标记的critera构建的。
我们有什么办法可以将CDbCriteria用作缓存依赖项吗?问这样的事情是对的吗?因为我只对由CDbCriteria构建的sql感兴趣,所以我必须手动构建sql,我认为这是不对的。
谢谢
答案 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
在上面我使用了createFindCommand
,createCountCommand
中有其他方法,如CDbCommandBuilder
,使用一个生成必须运行的sql语句的方法。
或者您可以使用Query Builder,但当然不会有CDbCriteria
。