Допустим, у меня есть два процесса:
- Один: создание записей в базе данных на основе информации из существующих записей той же таблицы. (долго работает, всегда опрашивает)
- Два: еще один процесс, чтобы читать, манипулировать и сохранять их снова. (опрос, работа, сохранение, выход)
Поэтому процесс требует запроса записей, измененных вторым процессом.Однако я продолжаю получать устаревшие объекты из хранилища, независимо от того, какие параметры кэширования я установил.Доктрина не обновляет сущности, которые уже были в кеше.
Использование $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)