【问题标题】:How to use query caching in yii2 ActiveRecord如何在 yii2 ActiveRecord 中使用查询缓存
【发布时间】:2015-01-14 12:42:04
【问题描述】:

我在引用指南:

``查询缓存是建立在数据缓存之上的一种特殊缓存功能。用于缓存数据库查询的结果。

查询缓存需要数据库连接和有效的缓存应用程序组件。查询缓存的基本用法如下,假设$db是一个yii\db\Connection实例:

$result = $db->cache(function ($db) {

    // the result of the SQL query will be served from the cache
    // if query caching is enabled and the query result is found in the cache
    return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();

});

``

我不认为我会在 AR 类中手动创建数据库连接。那么如何在我的 AR 模型中做到这一点呢?

我在 yii2 论坛上问过the same question,但没有得到答复。似乎人们不知道如何在 Active Record 中进行查询缓存。

【问题讨论】:

    标签: php mysql caching activerecord yii2


    【解决方案1】:

    Yii 2 现在需要闭包来包装查询。 AR 最终会进行查询,因此您可以将其放入闭包中。在 AR 类中,获取数据库并包装您要使用的查询。闭包有一个签名 function($db) 并且您通常需要访问更多变量,因此添加 use($variable) 以使变量在闭包中可见。

        $db = self::getDb();
        $object = $db->cache(function ($db) use($id) {
            return self::findOne($id);
        });
    

    如果您写入数据库,则在缓存持续时间到期之前,上面的缓存不会知道它。所以应该在缓存函数中添加依赖,告诉它什么时候使缓存失效。依赖关系很快变得复杂...... http://www.yiiframework.com/doc-2.0/yii-caching-dependency.html

    【讨论】:

    【解决方案2】:

    也许这有帮助:yii2 issues on github

    qiangxue 于 2014 年 1 月 11 日发表评论

    在2.0中,需要使用如下代码:

    $db->beginCache();
    // your db query code here...
    $db->endCache();
    

    【讨论】:

    • 不。我需要一种在我的 AR 模型中缓存查询的方法。
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多