我知道pagination
false
CActiveDataProvider
时,$dependency = new CDbCacheDependency('SELECT MAX(id) FROM user');
$dataProvider = new CActiveDataProvider(User::model()->cache(20, $dependency), array('pagination'=>false));
使用单个查询。
所以我写了这段代码:
SELECT MAX(id) FROM user
缓存数据时,执行此单个查询:
SELECT * FROM `user` `t`
SELECT MAX(id) FROM user
20秒后,缓存被刷新,因此查询:
User
另外,如果我在SELECT * FROM `user` `t`
SELECT MAX(id) FROM user
表中插入一条记录,因为它是依赖的,所以执行了这些查询:
$dependency = new CDbCacheDependency('SELECT MAX(id) FROM user');
$dataProvider = new CActiveDataProvider(User::model()->cache(20, $dependency, 2));
这一切似乎都没问题,没问题。
现在我尝试使用此示例查询进行另一项测试:
CActiveDataProvider
我知道上面的代码SELECT MAX(id) FROM user
SELECT MAX(id) FROM user
使用了两个查询。
缓存数据时,执行以下查询:
SELECT COUNT(*) FROM `user` `t`
SELECT MAX(id) FROM user
SELECT * FROM `user` `t` LIMIT 10
SELECT MAX(id) FROM user
太奇怪了! (为什么?!)
20秒后,缓存刷新,我看到执行了这些查询:
SELECT MAX(id) FROM user
SELECT COUNT(*) FROM `user` `t`
SELECT MAX(id) FROM user
SELECT MAX(id) FROM user
SELECT * FROM `user` `t` LIMIT 10
SELECT MAX(id) FROM user
现在,我在这里有4个查询!!!
最后我在表中插入一条记录,因为依赖项必须刷新缓存,但我在这里看到6条查询(而不是4条查询)!!!
{{1}}
这种行为很奇怪! (为什么?!)
我认为这是一个错误。
由于
答案 0 :(得分:0)
Salam hamvatan, 我有这个问题,非常搜索。我知道如果$ duration或$ dependency中的哪一个过期,缓存也会过期。 我的代码示例:
$dependency->sql = 'SELECT MAX(create_date),MAX(update_date),count(id) FROM game where status=:NOT_DONE';
$dependency->params = array(':NOT_DONE'=>Game::NOT_DONE);
$games = new CActiveDataProvider(Game::model()->cache(3600*24*30,$dependency,1));
我知道当分页错误时,CActiveDataProvider会使用单个 查询。
这句话对我有所帮助,谢谢。我在寻找这个。
http://www.yiiframework.com/doc/api/1.1/CDbConnection#queryCachingDuration-detail
答案 1 :(得分:-1)
如果您使用renderPartial渲染视图,则应将$ processOutput参数设置为true以避免多次ajax调用。