7

特定のテーブル レコードで変更が発生した場合の処理​​方法

public static function getAirportWithCache($iata_code){

              $result = Airports::getDb()->cache(function ($db) use ($iata_code){
                     $res = Airports::find()
                               ->where(['iata_code' => $iata_code])
                               ->limit(1)
                               ->asArray()
                               ->one();
                     return $res;
              });
              return $result;
        }
4

3 に答える 3

13

グローバル キャッシュの場合は、次を使用できます。

Yii::$app->cache->flush();

具体的には、 TagDependency を使用できます。

 //way to use
return Yii::$app->db->cache(function(){
    $query =  new Query();
    return $query->all();
}, 0, new TagDependency(['tags'=>'cache_table_1']));

//way to flush when modify table
TagDependency::invalidate(Yii::$app->cache, 'cache_table_1');

ドキュメントhttp://www.yiiframework.com/doc-2.0/yii-caching-tagdependency.htmlを参照してください。

于 2016-09-04T06:59:03.710 に答える
4

単純に次のように使用する必要があります\yii\caching\DbDependency

public static function getAirportWithCache($iata_code){
    // for example if airports count change, this will update your cache
    $dependency = new \yii\caching\DbDependency(['sql' => 'SELECT COUNT(*) FROM ' . Airports::tableName()]);
    $result = Airports::getDb()->cache(function ($db) use ($iata_code){
        return Airports::find()
            ->where(['iata_code' => $iata_code])
            ->limit(1)
            ->asArray()
            ->one();
    }, 0, $dependency);
    return $result;
}

続きを読む...

于 2016-02-08T15:00:25.720 に答える
2

どこでも実行するだけYii::$app->cache->flush();です(おそらくコントローラー内)

PS: サーバーに保存されているキャッシュ全体が削除されます

于 2016-02-08T12:25:06.333 に答える