0 关注者

类 yii\caching\DbQueryDependency

继承yii\caching\DbQueryDependency » yii\caching\Dependency » yii\base\BaseObject
实现yii\base\Configurable
版本可用2.0.12
源代码 https://github.com/yiisoft/yii2/blob/master/framework/caching/DbQueryDependency.php

DbQueryDependency 代表基于 yii\db\QueryInterface 实例查询结果的依赖项。

如果查询结果发生变化,则依赖项被视为已更改。查询通过 $query 属性指定。

可以使用匹配 yii\db\QueryInterface 的任何类的对象,因此此依赖项不仅可以与常规关系数据库一起使用,还可以与 MongoDB、Redis 等一起使用。

有关缓存的更多详细信息和使用信息,请参阅 关于缓存的指南文章

另请参阅 yii\db\QueryInterface

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$data mixed 保存在缓存中的依赖项数据,稍后将与最新的依赖项数据进行比较。 yii\caching\Dependency
$db string|array|object 数据库连接的应用程序组件 ID、连接对象或其数组配置。 yii\caching\DbQueryDependency
$method string|callable|null 应在 $query 对象上调用的方法。 yii\caching\DbQueryDependency
$query yii\db\QueryInterface 用于确定依赖项是否已更改的查询结果。 yii\caching\DbQueryDependency
$reusable boolean 此依赖项是否可重用。 yii\caching\Dependency

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
canGetProperty() 返回一个值,指示属性是否可读。 yii\base\BaseObject
canSetProperty() 返回一个值,指示属性是否可设置。 yii\base\BaseObject
className() 返回此类的完全限定名称。 yii\base\BaseObject
evaluateDependency() 通过生成和保存与依赖项相关的数据来评估依赖项。 yii\caching\Dependency
getHasChanged() 返回一个值,指示依赖项是否已更改。 yii\caching\Dependency
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\base\BaseObject
isChanged() 检查依赖项是否已更改。 yii\caching\Dependency
resetReusableData() 重置可重用依赖项的所有缓存数据。 yii\caching\Dependency

受保护方法

隐藏继承的方法

方法 描述 定义于
generateDependencyData() 生成确定依赖项是否已更改所需的数据。 yii\caching\DbQueryDependency
generateReusableHash() 生成可用于检索可重用依赖项数据的唯一哈希值。 yii\caching\Dependency

属性详细信息

隐藏继承的属性

$db 公共属性

数据库连接的应用程序组件 ID、连接对象或其数组配置。此字段可以留空,允许查询自动确定连接。

public string|array|object $db null
$method 公共属性

应在 $query 对象上调用的方法。

如果指定为字符串,将调用具有此名称的自身查询方法,并将 $db 值作为其第一个参数传递。例如:existsall

此字段可以指定为以下签名的 PHP 回调

function (QueryInterface $query, mixed $db) {
    //return mixed;
}

如果没有设置 - 将使用 yii\db\QueryInterface::one()

public string|callable|null $method null
$query 公共属性

用于确定依赖项是否已更改的查询结果。要调用的实际查询方法由 $method 确定。

方法详细信息

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是当调用未知方法时将隐式调用的 PHP 魔术方法。

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public method

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现做了两件事

  • 用给定的配置$config初始化对象。
  • 调用 init().

如果此方法在子类中被覆盖,建议

  • 构造函数的最后一个参数是一个配置数组,如这里的$config
  • 在构造函数的末尾调用父类实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的键值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public method

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行$value = $object->property;时会被隐式调用。

另见 __set().

public mixed __get ( $name )
$name string

属性名称

return mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只写

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即已定义且不为空。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行isset($object->property)时会被隐式调用。

注意,如果属性未定义,将返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置(非空)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

定义于: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行$object->property = $value;时会被隐式调用。

另见 __get().

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只读

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行unset($object->property)时会被隐式调用。

注意,如果属性未定义,此方法将不做任何事。如果属性是只读的,它将抛出异常。

另见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名称

throws yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() public method

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示属性是否可读。

属性可读,如果

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当$checkVars为 true 时);

另见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示属性是否可设置。

属性可写,如果

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当$checkVars为 true 时);

另见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static method
自 2.0.14 起已弃用。在 PHP >=5.5 上,请使用::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
evaluateDependency() public method

定义于: yii\caching\Dependency::evaluateDependency()

通过生成和保存与依赖项相关的数据来评估依赖项。

此方法由缓存调用,在将数据写入缓存之前。

public void evaluateDependency ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

                public function evaluateDependency($cache)
{
    if ($this->reusable) {
        $hash = $this->generateReusableHash();
        if (!array_key_exists($hash, self::$_reusableData)) {
            self::$_reusableData[$hash] = $this->generateDependencyData($cache);
        }
        $this->data = self::$_reusableData[$hash];
    } else {
        $this->data = $this->generateDependencyData($cache);
    }
}

            
generateDependencyData() protected method

生成确定依赖项是否已更改所需的数据。

此方法返回查询结果。

protected mixed generateDependencyData ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

return mixed

确定依赖关系是否已更改所需的数据。

throws yii\base\InvalidConfigException

配置无效时。

                protected function generateDependencyData($cache)
{
    $db = $this->db;
    if ($db !== null) {
        $db = Instance::ensure($db);
    }
    if (!$this->query instanceof QueryInterface) {
        throw new InvalidConfigException('"' . get_class($this) . '::$query" should be an instance of "yii\db\QueryInterface".');
    }
    if (!empty($db->enableQueryCache)) {
        // temporarily disable and re-enable query caching
        $originEnableQueryCache = $db->enableQueryCache;
        $db->enableQueryCache = false;
        $result = $this->executeQuery($this->query, $db);
        $db->enableQueryCache = $originEnableQueryCache;
    } else {
        $result = $this->executeQuery($this->query, $db);
    }
    return $result;
}

            
generateReusableHash() 受保护方法

定义于: yii\caching\Dependency::generateReusableHash()

生成可用于检索可重用依赖项数据的唯一哈希值。

另请参见 $reusable.

受保护的 字符串 generateReusableHash ( )
return string

此缓存依赖项的唯一哈希值。

                protected function generateReusableHash()
{
    $clone = clone $this;
    $clone->data = null; // https://github.com/yiisoft/yii2/issues/3052
    try {
        $serialized = serialize($clone);
    } catch (\Exception $e) {
        // unserializable properties are nulled
        foreach ($clone as $name => $value) {
            if (is_object($value) && $value instanceof \Closure) {
                $clone->{$name} = null;
            }
        }
        $serialized = serialize($clone);
    }
    return sha1($serialized);
}

            
getHasChanged() 公共方法
自版本 2.0.11 起已弃用。将在版本 2.1 中移除。请使用 isChanged() 代替。

定义于: yii\caching\Dependency::getHasChanged()

返回一个值,指示依赖项是否已更改。

公共的 布尔值 getHasChanged ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

return boolean

依赖项是否已更改。

                public function getHasChanged($cache)
{
    return $this->isChanged($cache);
}

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示方法是否已定义。

默认实现是调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可以覆盖此方法。

公共的 布尔值 hasMethod ( $name )
$name string

方法名称

return boolean

方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示属性是否已定义。

属性定义如下

  • 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当$checkVars为 true 时);

另请参见

公共的 布尔值 hasProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否已定义

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() 公共方法

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在对象使用给定配置初始化后,在构造函数结束时被调用。

公共的 void init ( )

                public function init()
{
}

            
isChanged() 公共方法(自版本 2.0.11 起可用)

定义于: yii\caching\Dependency::isChanged()

检查依赖项是否已更改。

公共的 布尔值 isChanged ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

return boolean

依赖项是否已更改。

                public function isChanged($cache)
{
    if ($this->reusable) {
        $hash = $this->generateReusableHash();
        if (!array_key_exists($hash, self::$_reusableData)) {
            self::$_reusableData[$hash] = $this->generateDependencyData($cache);
        }
        $data = self::$_reusableData[$hash];
    } else {
        $data = $this->generateDependencyData($cache);
    }
    return $data !== $this->data;
}

            
resetReusableData() 公共静态方法

定义于: yii\caching\Dependency::resetReusableData()

重置可重用依赖项的所有缓存数据。

公共静态的 void resetReusableData ( )

                public static function resetReusableData()
{
    self::$_reusableData = [];
}