Doctrine2 ORM não atualiza objetos que são alterados fora de um script

Eu realmente não sabia como intitular isso ou procurar uma pergunta já postada, então minhas desculpas se isso já foi visto aqui antes.

Estou obtendo alguns resultados indesejados com o seguinte código:

// get object managers
$fooManager = $this->getContainer()->get('foo_manager');
$barManager = $this->getContainer()->get('bar_manager');

// infinite loop
for (;;) {

    // keep getting unitialized "foo" objects, or quit if none
    while (($foo = $fooManager->findUninitialized()) !== null) {

        // an uninitialized "foo" will need to make a "bar" object
        $bar = $barManager->create();
        $bar->setA('...');

        // save "bar" to database, update() WILL perform a flush()
        $barManager->update($bar);

        // make the association of "bar" to "foo"
        $foo->setBar($bar);

        // save "foo" to database, update() WILL perform a flush()
        $fooManager->update($foo);

    }

    // keep getting unprocessed "foo" objects, or quit if none
    while (($foo = $fooManager->findUnprocessed()) !== null) {

        // process the data from "foo" object's "bar"
        process($foo->getBar()->getB());

    }

}

Você pode ver isso no primeirowhile laço$bar objetos estão sendo feitos e colocados no banco de dados. Outro script está pegando nelas e fazendo coisas para elas.

No segundowhile loop, o$foo objetos estão tentando acessar o objeto "barra" modificado (observegetB() sendo chamado, podemos supor que em outro script sendo executado separadamentesetB() foi usado para alterar o estado do objeto).

No entanto, no segundo loop, quando eu chamogetB(), não está retornando o valor definido comsetB() nesse outro script.

Posso garantir que todos os dados estão sendo adequadamente mantidos (e liberados) no banco de dados, portanto, quandogetB() é chamado nesse segundo loop, o que estava segurando "B" foi alterado e está presente no banco de dados.

Uma coisa que eu notei é que no arquivo de log, eu não estou vendo uma consulta para puxar os dados para "bar" quando eu chamo$foo->getBar() no segundo loop (estes devem ser carregados com preguiça). Além disso, se euvar_dump() o valor retornado de$foo->getBar() no segundo loop, parece exatamente que o objeto "barra" associado ficaria no final do primeiro loop.

Eu estou pensando que há algum tipo de cache ou algo acontecendo (desde que eu alterei os objetos "bar" anteriormente na execução do script, o Doctrine parece que é apenas reutilizá-los em vez de recarregar seus dados do banco de dados ).

Eu sei que o que estou tentando fazer provavelmente não é comum. O que estou fazendo é usar os recursos de comando do console do Symfony2 para escrever alguns "daemons" de linha de comando para ajudar no processamento de alguns dados; o "daemon" que contém este código está sendo executado em conjunto com outro "daemon" que processa os objetos "bar" que são criados.

Curioso para saber se há uma maneira de corrigir isso para onde no meu segundo loop quando eu chamo o$foo->getBar() método, estou realmente puxando os dados atualizados do banco de dados. Qualquer ajuda é muito apreciada.

questionAnswers(1)

yourAnswerToTheQuestion