У меня есть приложение в Symfony с mongodb, где у меня есть приложение, всегда работающее как сервер. Когда я пытаюсь извлечь объекты из базы данных, я не получаю значения в виде новостей для объекта. Похоже, что доктрина кэширует объекты, и хотя есть другие процессы, которые обновляют базу данных, мое приложение не видит изменений и всегда возвращает первый возвращенный объект.Symfony doctrine force всегда запрашивать базу данных
В качестве теста я запрограммировал два процесса, один записывает значения, а другой считывает эти значения, так как вы можете видеть, что читатель всегда видит одно и то же значение.
Это код двух процессов:
class SetterCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('delfos:setter')
->setDescription('Sets value');
}
protected function execute(InputInterface $input, OutputInterface $output){
$em = $this->getContainer()->get('doctrine_mongodb')->getManager();
$element = $em->getRepository('DelfosBundle:TestDoc')->findOneById("46e05892b50334e0badbb8cac9a076a7");
$i = 0;
while(true){
$element->setIndex($i);
$em->persist($element);
$em->flush();
echo "Setting value to ".$i.PHP_EOL;
$i++;
sleep(2);
}
}
}
class GetterCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('delfos:getter')
->setDescription('Gets value');
}
protected function execute(InputInterface $input, OutputInterface $output){
$em = $this->getContainer()->get('doctrine_mongodb')->getManager();
while(true){
$element = $em->getRepository('DelfosBundle:TestDoc')->findOneById("46e05892b50334e0badbb8cac9a076a7");
echo "Current value ".$element->getIndex().PHP_EOL;
sleep(2);
}
}
}
/**
* @MongoDB\Document
*/
class TestDoc
{
/**
* @MongoDB\Id(strategy="UUID")
*/
protected $id;
/**
* @MongoDB\Int
*/
protected $index;
...
}
Как я могу заставить доктрину в этом процессе всегда запросов к базе данных?
Попробуйте отсоединить ранее запрошенный объект перед повторным выполнением запроса '$ entityManager-> detach ($ object);' –
Это не имеет смысла - вы получаете такой элемент (всегда такой же запрос) '$ element = $ em-> getRepository ('DelfosBundle: TestDoc') -> findOneById ("46e05892b50334e0badbb8cac9a076a7"); 'и ожидать другого результата? – pavlovich
$ entityManager-> detach ($ object) woks правильно, но нет никакого способа сделать это автоматически? –