как внедрить Doctrine кеш результатов при использовании Symfony пула кеша - PullRequest
0 голосов
/ 16 апреля 2020

Я использую 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 в мой сервис и использовать его там?

...