如果用户更改Issue实体上的字段"status",我需要创建一个关于该用户的数据库记录,该用户更改了字段,以前的状态和新状态。
如何做到这一点:
例如,我有一个名为Issue的实体。我需要记录这个实体的一个字段的更改。如果用户更改Issue实体上的字段"status",我需要创建一个关于该用户的数据库记录,该用户更改了字段,以前的状态和新状态。
使用:Symfony2 + doctrine2.
您可以为此使用事件订阅者,并将其附加到ORM事件侦听器(在symfony 2中,有关于此的文档):
namespace YourAppSubscriber;
use DoctrineCommonEventSubscriber;
use DoctrineORMEventOnFlushEventArgs;
use DoctrineORMEvents;
use YourAppEntityIssue;
use YourAppEntityIssueLog;
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
的实现从示例中删除,因为这取决于您自己的需求。