我在Symfony中有一个mongodb应用程序,我的应用程序总是作为服务器运行。当我尝试从数据库中检索对象时,我没有收到对象的newset值。就像doctrine正在缓存对象一样,虽然还有其他进程可以更新数据库,但是我的应用程序看不到更改,并且始终返回检索到的第一个对象。
作为测试,我编写了两个进程,一个写入值,另一个读取这些值,因为您可以看到读者总是看到相同的值。
这是两个过程的代码:
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;
...
}
如何在此过程中强制学说始终查询数据库?