yii中的片段缓存:我应该在哪里加载模型?

时间:2013-08-06 12:54:55

标签: php caching yii

通常,良好的做法是仅从控制器调用模型,然后将其传递给视图。这是一个例子:

public function actionView($id)
{
    $this->render('view', array(
            'model' => $this->loadModel((int)$id),
        ));
}

然后,您可以在视图中使用model来显示信息。

问题是我想在我的视图中实现片段缓存:

<?php if($this->beginCache($id, array('duration'=>3600))) { ?>
...content to be cached...
<?php $this->endCache(); } ?>

但是由于模型已经从控制器加载,所以无论如何都会执行sql查询。我怎样才能防止这种情况发生?

我现在找到的唯一替代方法是从视图中加载模型(在缓存部分中)或执行数据缓存,但我更喜欢使用片段缓存!

1 个答案:

答案 0 :(得分:0)

您应该将缓存移动到控制器并使用data cache而不是片段缓存,即:

public function actionView($id)
{
    $model = Yii::app()->cache->get((int)$id);
    if($model === false)
    {
        $model = $this->loadModel((int)$id);
        Yii::app()->cache->set($id, $model, 3600);
    }
    $this->render('view', array(
            'model' => $model,
        ));
}

如果需要,您仍然可以使用片段缓存(当您对已经加载的模型执行密集操作时),只需使用某些内容作为前缀id。