Я использую Doctrine кэш результатов в моем приложении Symfony и не могу понять, как добавить кэш в мой код.
Я настраиваю кэш результатов для использования cache.app
служба, в соответствии с Symfony Doctrine ссылка на конфигурацию :
framework:
cache:
pools:
doctrine.result_cache_pool:
adapter: cache.app
doctrine:
orm:
# ...
result_cache_driver:
type: pool
pool: doctrine.result_cache_pool
Я успешно использую кэш результатов (я подтвердил, что это работает: когда Я вызываю fetchItems()
второй раз, он извлекает данные из кэша и не попадает в базу данных):
public function fetchItems(): array
{
$query = $this->buildQuery(); //get Doctrine query from somewhere
$query->enableResultCache(86400, 'my_cache_key');
return $query->getResult();
}
Затем я пытаюсь внедрить пул кэша в мою службу и использовать его:
use Psr\Cache\CacheItemPoolInterface;
class MyService
{
private $cache;
public function __construct(CacheItemPoolInterface $cache)
{
$this->cache = $cache;
}
public function checkCache(): bool
{
return $this->cache->hasItem('my_cache_key');
}
public function deleteCache(): bool
{
return $this->cache->deleteItem('my_cache_key');
}
Но checkCache()
всегда возвращает false
, а deleteCache()
не удается удалить данные из кэша.
Я пытался явно настроить CacheItemPoolInterface
для ссылки на Doctrine кэш результатов, но это не имело никакого значения:
services:
Psr\Cache\CacheItemPoolInterface:
'@doctrine.result_cache_pool'
Как я могу внедрить кэш результатов Doctrine в мой сервис и использовать его там?