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
函数没有 return 结果,它 return 是一个可用于获取结果的查询对象。对此调用 toArray
将检索所有实体并为您提供可以缓存的内容。 (这可能会造成混淆,因为 toArray
在其他情况下也用于将实体转换为数组。)
我正在尝试将数据库对象从(插件)组件 保存到 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
函数没有 return 结果,它 return 是一个可用于获取结果的查询对象。对此调用 toArray
将检索所有实体并为您提供可以缓存的内容。 (这可能会造成混淆,因为 toArray
在其他情况下也用于将实体转换为数组。)