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

标签 php caching yii

当我们使用 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/

相关文章:

mysql - 在不知道表结构的情况下使用Faker填表

php - 使用 Yii 重定向访问规则

php - MySQLi 查询返回单个结果——应该是结果数组

PHP unlink 正在请求一个字符串并试图给它 sql 字符串

c# - 该流未打开以供读取

yii - 谁能解释 CDbCriteria->scopes 是如何工作的?

php - 我真的需要关于 PHP 中的多个复选框+文本框的建议

c# - 通过反射加载的 DLL 是否被缓存?

javascript - 当有多个带有数据请求的 React.js 组件实例时如何处理缓存?

php - Yii CJuiDatePicker - 页面上的第二个实例在第一个实例之后未直接打开