Symfony 和学说:对象未在搜索中更新

Symfony & doctrine : object not updated in a search

我正在 phpUnit 中测试某个动作。

在我的测试中,我从容器中获取了实体管理器。我创建了一个实体 $finalisation,然后将它插入我的 table :

public function testAction()
{

self::bootKernel();
        $em = static::$kernel->getContainer()
        ->get('doctrine')
        ->getManager()
        ;
//I create some $finalisation entity, and insert it
(...)
$em->persist($finalisation);
$em->flush();

//I call then the action to test (my function authentification works well)
$crawler = $this->authentification("/annonce/finaliser-annonce/annonce-en-cours-4");
// (... MORE CODE SEE BELOW)
}

此操作旨在通过服务 (GestionnaireFinalisation) 更改 $finalisation 对象:$finalisation 的字段 finaliseParAuteur 从 false 变为 true。

现在,我有了名为 GestionnaireFinalisation 的服务,它可以转换字段 对象 $finalisation 从 FALSE 到 TRUE

class GestionnaireFinalisation 
{
    protected $em;

    public function __construct(EntityManager $entityManager){
        $this->em = $entityManager;
    }

public function finalisationParAuteur($annonceEnCours, $profilAuteur)
    {
        $finalisation = $this->em->getRepository('AppBundle:Finalisation')
        ->findFinalisationParProfilAuteur($annonceEnCours, $profilAuteur);

        if ($finalisation->getFinaliseParPresta())
        {
            // ... THIS CODE IS NOT RUN
        }
        else
        {
            //THIS IS THE CODE WHICH IS RUN
            $finalisation->setFinaliseParAuteur(true);
            $this->em->flush();
            return (false);
        }
    }

现在的问题是:

当我在测试中搜索 $finalisation 时,似乎我没有修改对象:

$finalisation = $em->getRepository(Finalisation::class)
        ->someMethodToGetTheFinalisationUpdated();

证明:当我转储 $finalisation 时,我进入了 dateCreation 和 dateUpdate 相同的 DateTime,这不应该是这种情况,因为对象在服务中被函数 finalisationParAuteur 修改了。

我怀疑问题出在两个实体管理器上(一个在测试中,另一个在服务中)。

非常感谢任何帮助!

谢谢!

经过一番努力,我找到了解决方案。

就是这个,希望对大家有帮助!

当我用实体管理器调用服务时,$finalisation 被修改。并且在测试中,$finalisation 仍然指向旧版本的对象。

解决方案是使用刷新方法(我以前从未使用过):

$em->refresh($finalisation);

此方法刷新了对象,所以我得到了在服务中进行的所有修改的对象!