Как изменить значение поля в прослушивателе событий preUpdate? - PullRequest
14 голосов
/ 19 января 2012

Документация гласит:

Изменения в полях переданных объектов больше не распознаются операцией сброса, используйте вычисленный набор изменений, переданный событию, чтобы изменить значения примитивного поля.

Но это также говорит:

getEntityChangeSet (), чтобы получить копию массива изменений. Изменения в этом возвращенном массиве не влияют на обновление.

Значит ли это, что я не могу изменить поля сущности в прослушивателе событий preUpdate? Если нет, то как мне выполнить это обновление?

Ответы [ 2 ]

34 голосов
/ 19 января 2012

Очевидно, вам нужно пересчитать набор изменений самостоятельно, чтобы изменения вступили в силу:

$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$meta = $em->getClassMetadata(get_class($entity));
$uow->recomputeSingleEntityChangeSet($meta, $entity);
5 голосов
/ 07 июня 2012

Или же вы можете использовать класс PreUpdateEventArgs (http://www.doctrine -project.org / api / orm / 2.2 / class-Doctrine.ORM.Event.PreUpdateEventArgs.html ).Пример:

public function preUpdate(PreUpdateEventArgs $args)
{
    $entity = $args->getEntity();

    if ($entity instanceof Product)
    {
        $args->setNewValue(
            "discount",
             123
        );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...