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

CAKEPHP3:在组件中缓存数据库对象,php,cakephp,cakephp-3.1,Php,Cakephp,Cakephp 3.1,我正试图将一个数据库对象从(插件)组件保存到CakePHP缓存中 这是可行的(注意toArray()) 但这失败了: $domains = Cache::read('domains', 'long'); if ($domains === false) { $domainsTable = TableRegistry::get('DomainManager.Domains'); $domains = $domainsTable-&

我正试图将一个数据库对象从(插件)组件保存到CakePHP缓存中

这是可行的(注意toArray())

但这失败了:

        $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
也用于将实体转换为数组。)

Hi Greg,谢谢你的回答。但是CakePHP文档()不是说“Cache::write()可以存储任何类型的对象,并且非常适合存储模型查找的结果”吗?或者这是否意味着缓存中只能存储数组?可能是我误读了有关此的文档。“Results”通常指数据库返回的行
find
不返回行,它返回一个查询对象,可用于以各种方式检索行。您可以在缓存中存储很多东西,但查询对象不是其中之一。好的,谢谢!:-)看起来我应该再次深入研究新的ORM。我在文档()中找到了一些东西,
$query->toArray()
执行查询,就像
$query->all()
一样。谢谢格雷格的提示!
        $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;
    }