1

一般に、コントローラーからのみモデルを呼び出してからビューに渡すことをお勧めします。次に例を示します。

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 クエリはとにかく実行されます。どうすればこれを防ぐことができますか?

私が現在見つけている唯一の代替手段は、(キャッシュされたセクションで) ビューからモデルをロードするか、データ キャッシングを実行することですが、フラグメント キャッシングを使用することをお勧めします!

4

1 に答える 1

0

キャッシングをコントローラーに移動し、フラグメント キャッシュの代わりにデータ キャッシュを使用する必要があります。

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 の前に何かを付けてください。

于 2013-08-06T15:03:32.547 に答える