Doctrine 2 с кешем запросов ZF3 без учета настроек - PullRequest
0 голосов
/ 24 октября 2019

Я должен задать этот вопрос здесь, так как мой опыт работы с Doctrine 2 не такой большой, и после большого поиска я не смог найти решение.

Моя установка основана на ZF3 и использует Doctrine 2 + Redisкэширование. Кеширование работает, но оно кеширует все и не соответствует моим настройкам из-за нижеприведенного.

Если я установил setCacheable (false) или useResultCache (false) или useQueryCache (false) они не имеют эффекта и все кэшируется. Однако странная часть заключается в том, что если я установлю setResultCacheLifetime (10) или setQueryCacheLifetime (10) , то срок действия кэша истечет через 10 секунд.

Почему это происходит? Разве Doctrine не должна «уважать» мое желание НЕ кэшировать что-либо, когда я этого не хочу?

То же самое происходит, если я использую файловую систему " array " или " "как кеш и все остальное.

Конфигурация Doctrine в local.php (также пробовал module.config.php и тот же результат):

'configuration' => [
     'orm_default' => [
        'query_cache'       => 'my_rediscache',
        'result_cache'      => 'my_rediscache',
         'metadata_cache'   => 'my_rediscache',
         'hydration_cache'  => 'my_rediscache',
   ],
],

Репозиторий запросов:

namespace Application\Repository;

use Doctrine\ORM\EntityRepository;

class MyOwnEntityRepository extends EntityRepository
{
    public function getStuff($some_data)
    {
        $entityManager = $this->getEntityManager();

        $queryBuilder = $entityManager->createQueryBuilder();

        $queryBuilder->select('...') // my query removed

        return $queryBuilder->getQuery()->setCacheable(false)
                                ->useResultCache(false)
                                    ->setResultCacheLifetime(10)
                                        ->useQueryCache(false)
                                            ->setQueryCacheLifetime(10)
                                                ->getSingleScalarResult();
    }
}

Обычно его называют:

$this->entityManager->getRepository(MyOwnEntity::class)->getStuff($some_data);

Ничего особенного или необычного нет, это должно работать правильно, но по какой-то причине я что-то упускаю

Эта ситуация очень расстраивает, потому что определенные части приложения не нуждаются в кэшировании и требуют актуальных результатов.

Может кто-нибудь, пожалуйста, что я здесь не так делаю? Пожалуйста, сообщите.

Спасибо

...