Symfony и доктрина: объект не обновляется при поиске

Я тестирую определенное действие в phpUnit.

В моем тесте я получаю диспетчер сущностей из контейнера. Я создаю объект $ finalization, а затем вставляю его в свою таблицу:

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)
}

Это действие предназначено для изменения объекта $ finalization через службу (GestionnaireFinalisation): значение поля finaliseParAuteur $ finalization изменяется с false на true.

Теперь у меня есть служба под названием GestionnaireFinalisation, которая преобразует поле в финализация объекта $ из 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);
        }
    }

Теперь проблема:

когда я ищу в тесте $ finalization, оказывается, что я не изменяю объект:

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

Доказательство: когда я сбрасываю $ finalization, я получил в dateCreation и dateUpdate тот же DateTime, чего не должно быть, потому что объект был изменен в службе функцией finalisationParAuteur.

Я подозреваю, что проблема связана с двумя менеджерами сущностей (один в тесте, а другой в службе).

Любая помощь будет очень признательна!

Спасибо !

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение после некоторой борьбы.

Вот оно, надеюсь, это поможет кому-то другому!

Когда я вызываю службу с помощью диспетчера сущностей, $ finalization изменяется. И в тесте $ finalization по-прежнему указывает на старую версию объекта.

Решение состоит в том, чтобы использовать метод обновления (который я никогда раньше не использовал):

$em->refresh($finalisation);

Этот метод обновляет объект, поэтому я получаю объект со всеми изменениями, внесенными в службу!

Другие вопросы по теме