当我们用 CDbCacheDependency 定义缓存依赖时,我们必须提供一个 SQL 作为依赖。当我们使用 CDbCriteria 时,不可能提供 sql,因为 sql 是通过带有适当参数令牌的 critera 构建的。
有什么方法可以使用 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
,还有其他方法,例如createCountCommand
in CDbCommandBuilder
,使用一种生成您必须运行的 sql 语句的方法。
或者,您可以使用Query Builder,但当然不会有任何CDbCriteria
东西。