CakePHP 3:在组件中缓存数据库对象


CakePHP 3: Caching database object in component

>我正在尝试将(插件)组件中的数据库对象保存到CakePHP缓存中。

这工作(注意 toArray() )

        $domains = Cache::read('domains', 'long');
        if ($domains === false) {
            $domainsTable = TableRegistry::get('DomainManager.Domains');
            $domains = $domainsTable->find('all', ['fields' => ['id', 'name']]);
            $domains = $domains->toArray();
            Cache::write('domains', $domains, 'long');
            return $domains;
        }

但这失败了:

        $domains = Cache::read('domains', 'long');
        if ($domains === false) {
        $domainsTable = TableRegistry::get('DomainManager.Domains');
        $domains = $domainsTable->find('all', ['fields' => ['id', 'name']]);
        Cache::write('domains', $domains, 'long');
        return $domains;
    }

来自 CakePHP 的错误是错误:无法序列化或反序列化 PDO 实例

抱歉,如果我只是做错了什么,我刚刚从 Cake2 切换到 Cake3,在文档中找不到任何东西。

感谢您的任何胶水!

find 函数不返回结果,它返回可用于获取结果的查询对象。对此调用toArray将检索所有实体并为您提供可以缓存的内容。(这可能会令人困惑,因为在其他情况下toArray也用于将实体转换为数组。