Doctrine2 ORM не обновляет объекты, которые изменены вне скрипта

Я действительно не знал, как озаглавить это или искать уже опубликованный вопрос, поэтому мои извинения, если это было замечено здесь ранее.

Я получаю некоторые нежелательные результаты с помощью следующего кода:

// 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());

    }

}

Вы можете видеть это в первомwhile петли,$bar объекты создаются и помещаются в базу данных. Другой сценарий подхватывает их и делает с ними что-то.

В секундуwhile петля,$foo объекты пытаются получить доступ к своему модифицированному объекту "bar" (обратите внимание наgetB() будучи вызванным, мы можем предположить, что в другом скрипте выполняется отдельноsetB() был использован для изменения состояния объекта).

Тем не менее, во втором цикле, когда я звонюgetB(), это не возвращает значение, которое я установил сsetB() в этом другом сценарии.

Я могу гарантировать, что все данные должным образом сохраняются (и сбрасываются) в базу данных, поэтому, когдаgetB() вызывается во втором цикле, все, что удерживало "B", было изменено и присутствует в базе данных.

Одна вещь, которую я заметил, заключается в том, что в файле журнала я не вижу запроса для извлечения данных для «бара», когда я звоню$foo->getBar() во втором цикле (они должны быть лениво загружены). Кроме того, если яvar_dump() значение, возвращаемое из$foo->getBar() во втором цикле это выглядит точно так же, как связанный объект "bar" будет выглядеть к концу первого цикла.

Я думаю, что происходит какое-то кеширование или что-то в этом роде (поскольку я изменил эти «барные» объекты в начале выполнения скрипта, Doctrine кажется, что он просто использует их повторно, а не перезагружает их данные из базы данных ).

Я знаю, что я пытаюсь сделать, вероятно, не часто. Я использую возможности командной консоли Symfony2 для написания нескольких «демонов» командной строки, чтобы помочь с обработкой некоторых данных; «демон», содержащий этот код, запускается вместе с другим «демоном», который обрабатывает созданные объекты «bar».

Любопытно, есть ли способ исправить это, где в моем втором цикле, когда я вызываю$foo->getBar() метод, я на самом деле вытаскиваю обновленные данные из базы данных. Любая помощь очень ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос