2

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

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

谢谢

4

1 回答 1

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,还有其他方法,例如createCountCommandin CDbCommandBuilder,使用一种生成您必须运行的 sql 语句的方法。


或者,您可以使用Query Builder,但当然不会有任何CDbCriteria东西。

于 2013-01-03T00:43:32.730 回答