Symfony doctrine force总是查询数据库

时间:2016-07-20 17:34:32

标签: php symfony doctrine-orm

我在Symfony中有一个mongodb应用程序,我的应用程序总是作为服务器运行。当我尝试从数据库中检索对象时,我没有收到对象的newset值。就像doctrine正在缓存对象一样,虽然还有其他进程可以更新数据库,但是我的应用程序看不到更改,并且始终返回检索到的第一个对象。

作为测试,我编写了两个进程,一个写入值,另一个读取这些值,因为您可以看到读者总是看到相同的值。

getter always sees a zero value

这是两个过程的代码:

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;

    ...
}

如何在此过程中强制学说始终查询数据库?

1 个答案:

答案 0 :(得分:2)

使用QueryBuilder并在使用setRefresh()方法构建的查询上将刷新提示设置为true