Сделайте doctrine2 обновить кэшированные объекты из базы данных - PullRequest
0 голосов
/ 21 марта 2019

Допустим, у меня есть два процесса:

  • Один: создание записей в базе данных на основе информации из существующих записей той же таблицы. (долго работает, всегда опрашивает)
  • Два: еще один процесс, чтобы читать, манипулировать и сохранять их снова. (опрос, работа, сохранение, выход)

Поэтому процесс требует запроса записей, измененных вторым процессом.Однако я продолжаю получать устаревшие объекты из хранилища, независимо от того, какие параметры кэширования я установил.Доктрина не обновляет сущности, которые уже были в кеше.

Использование $entityManager->clear() непосредственно перед тем, как запрос заставляет его работать, но это вызывает у меня какое-то плохое предчувствие, потому что не похоже, что доктрина должна быть такойиспользуемый.

Поскольку я новичок в доктрине, пожалуйста, рассмотрите также очевидные ответы.

Как я могу получить доктрину для обновления кэшированных объектов новыми атрибутами из базы данных?


Создание EntityManager:

$config = Setup::createAnnotationMetadataConfiguration(
        '/path/to/my/models',
        true,
        null,
        null,
        false
    );
$entityManager= EntityManager::create(
    $dbConfig,
    $config
);

Функция репозиториев: (член класса репозитория, расширяющий EnitityRepository)

    public function findThisAndThat(): array
    {
        $qb = $this->_em->createQueryBuilder();
        $qb->select('t')
           ->from('Corp\MyProject\Models\Task', 't')
           ->orderBy('t.priority', 'DESC');
        return $qb->getQuery()
                  ->getResult();
    }

Поиск объектов:

$taskRepository = $this->entityManager->getRepository(Task::class);
$tasks          = $taskRepository->findThisAndThat();

Я пытался использовать следующее:

$config->setSecondLevelCacheEnabled(false);
$query->setCacheMode(Cache::MODE_REFRESH)
$query->useResultCache(false)
$query->setCacheable(false)
...