Yii2数据库查询缓存:duration设为0/NULL的效果及依赖触发需求
Yii2 查询缓存依赖与有效期设置说明
针对你提出的问题,结合Yii2的缓存机制,直接给出结论:
1. 当$duration设为0时
缓存会永久保留(直到依赖触发失效或缓存被手动清除),并且会正常检查DbDependency。也就是说,只要依赖的SQL(SELECT MAX(\modifieddatetime`) FROM {{%schedule}}`)返回的结果不变,就一直使用缓存数据;一旦结果变化,缓存会立即失效,重新执行查询并更新缓存。这完全符合你“仅在DbDependency变化时执行查询”的需求。
2. 当$duration设为NULL时
这会直接禁用缓存功能,每次调用方法都会执行原始数据库查询,不会读取缓存,自然也不会检查依赖。
对应代码调整
如果要实现你的需求,修改后的代码片段如下:
public function getScheduleSelect() { $duration = 0; // 缓存永不过期,直到依赖变化 $dependency = new DbDependency(); $dependency->sql = 'SELECT MAX(`modifieddatetime`) FROM {{%schedule}}'; return ArrayHelper::map( $this->find() ->select('schedule') ->orderBy('schedule') ->distinct() ->asArray() ->cache($duration, $dependency) ->all(), 'schedule', 'schedule'); }
内容的提问来源于stack exchange,提问作者JKofsky
相关产品推荐
相关产品推荐

