diff --git a/framework/db/Command.php b/framework/db/Command.php index a3002c0..0fb099a 100644 --- a/framework/db/Command.php +++ b/framework/db/Command.php @@ -418,7 +418,7 @@ class Command extends \yii\base\Component } if (isset($cache)) { - $cacheKey = __CLASS__ . "/{$db->dsn}/{$db->username}/$sql/$paramLog"; + $cacheKey = $cache->buildKey(__CLASS__, $db->dsn, $db->username, $sql, $paramLog); if (($result = $cache->get($cacheKey)) !== false) { \Yii::trace('Query result found in cache', __CLASS__); return $result; diff --git a/framework/db/Schema.php b/framework/db/Schema.php index 7e7eb9d..7415bee 100644 --- a/framework/db/Schema.php +++ b/framework/db/Schema.php @@ -11,6 +11,7 @@ namespace yii\db; use yii\base\NotSupportedException; use yii\base\InvalidCallException; +use yii\caching\Cache; /** * Schema is the base class for concrete DBMS-specific schema classes. @@ -85,9 +86,9 @@ abstract class Schema extends \yii\base\Object $db = $this->db; $realName = $this->getRealTableName($name); - /** @var $cache \yii\caching\Cache */ + /** @var $cache Cache */ if ($db->enableSchemaCache && ($cache = \Yii::$application->getComponent($db->schemaCacheID)) !== null && !in_array($name, $db->schemaCacheExclude, true)) { - $key = $this->getCacheKey($name); + $key = $this->getCacheKey($cache, $name); if ($refresh || ($table = $cache->get($key)) === false) { $table = $this->loadTableSchema($realName); if ($table !== null) { @@ -104,12 +105,13 @@ abstract class Schema extends \yii\base\Object /** * Returns the cache key for the specified table name. + * @param Cache $cache the cache component * @param string $name the table name * @return string the cache key */ - public function getCacheKey($name) + public function getCacheKey($cache, $name) { - return __CLASS__ . "/{$this->db->dsn}/{$this->db->username}/{$name}"; + return $cache->buildKey(__CLASS__, $this->db->dsn, $this->db->username, $name); } /** @@ -171,7 +173,7 @@ abstract class Schema extends \yii\base\Object /** @var $cache \yii\caching\Cache */ if ($this->db->enableSchemaCache && ($cache = \Yii::$application->getComponent($this->db->schemaCacheID)) !== null) { foreach ($this->_tables as $name => $table) { - $cache->delete($this->getCacheKey($name)); + $cache->delete($this->getCacheKey($cache, $name)); } } $this->_tableNames = array();