Создание сущности на сущности флеша

Как я могу это сделать:

Например, у меня есть объект под названием Issue. Мне нужно записать изменения в поле этого объекта.
Если пользователь изменяет поле "статус" в объекте "Проблема", мне нужно создать запись базы данных об этом с пользователем, который изменил поле, предыдущий статус и новый статус.

Использование: Symfony2 + doctrine2.

Ответ 1

Вы можете использовать подписчик событий для этого и присоединить его к слушателю событий ORM (в symfony 2, there документы об этом):

namespace YourApp\Subscriber;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\OnFlushEventArgs;
use Doctrine\ORM\Events;
use YourApp\Entity\Issue;
use YourApp\Entity\IssueLog;

class IssueUpdateSubscriber implements EventSubscriber
{
    public function onFlush(OnFlushEventArgs $args)
    {
        $em  = $args->getEntityManager();
        $uow = $em->getUnitOfWork();

        foreach ($uow->getScheduledEntityUpdates() as $updated) {
            if ($updated instanceof Issue) {
                $em->persist(new IssueLog($updated));
            }
        }

        $uow->computeChangeSets();
    }

    public function getSubscribedEvents()
    {
        return array(Events::onFlush);
    }
}

Вы можете в конце концов проверить набор изменений, как я объяснил в Есть ли встроенный способ получить все измененные/обновленные поля в объекте Doctrine 2?.

Я оставил реализацию IssueLog из примера, так как это соответствует вашим собственным требованиям.