当我们使用 CDbCacheDependency 定义缓存依赖项时,我们必须提供 SQL 作为依赖项。当我们使用 CDbCriteria 时,不可能提供 sql,因为 sql 是通过带有适当参数标记的 critera 构建的。
有什么方法可以使用 CDbCriteria 作为缓存依赖项吗?问这种话合适吗?因为我只对 CDbCriteria 构建的 sql 感兴趣,否则我必须手动构建 sql,我认为这是不对的。
谢谢
最佳答案
从 Yii 1.1.13 开始,恐怕您将必须使用 SQL 语句,并且没有直接使用 CDbCriteria
的方法。
但是有一种间接方式使用CDbCriteria
,但最终您必须使用它来生成 SQL 命令,您可以使用它来生成 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语句的方法必须运行。
或者您也可以使用 Query Builder ,但当然不会有任何 CDbCriteria
。
关于php - Yii::如何使用 CDbCriteria 作为缓存依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117870/