我已经阅读了这里的许多关于此问题的帖子和文档,但仍然无法弄清楚如何做我想做的事情。
我正在使用带有下拉过滤器的 GridView。目前,我的
AudioModel
中有以下代码来获取选择数组:
Public function getFeednameSelect() {
return ArrayHelper::map(
Audio::find()
->select('feedname')
->distinct()
->asArray()
->all(),
'feedname', 'feedname'),
}
web\config.php
包含
$config = [
...
'components' => [
...
'cache' => [
'class' => 'yii\caching\FileCache',
],
...
AudioModel
目前拥有超过 83k 条记录。我愿意
Feeds
模型中的变化。这是我第一次尝试缓存任何东西。
谢谢你。
---更新--- 我尝试过以下方法
public function getFeednameSelect() {
$duration = 86400; // cache query results for 1 day (60*60*24 secs).
$dependency = [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT MAX(`modifieddatetime`) FROM `feeds`',
];
return ArrayHelper::map(
$this->find()
->select('feedname')
->orderBy('feedname')
->distinct()
->asArray()
->cache(15) // This works
//->cache($duration, $dependency) // This doesn't
->all(),
'feedname', 'feedname');
}
当我使用
->cache($duration, $dependency)
时,我不断得到
Call to a member function evaluateDependency() on array
$this->find()
有效。 'sql' =>
语句中的字段名和表名是正确的。
快到了。我认为你唯一需要改变的是
$dependency = [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT MAX(`modifieddatetime`) FROM `feeds`',
];
进入
$dependency = new DbDependency();
$dependency->sql = 'SELECT MAX(`modifieddatetime`) FROM `feeds`';
现在您正在将依赖项作为数组传递,这可以解释错误。依赖项必须是一个对象,该对象扩展了 缓存依赖项类。