【发布时间】:2018-03-08 14:18:15
【问题描述】:
在我的 symfony 应用程序中,我有我的 event_subscriber
CoreBundle\EventSubscriber\CloseIssueSubscriber:
tags:
- { name: doctrine_mongodb.odm.event_subscriber, connection: default }
我的订阅者只听 postPersist 和 postUpdate 事件:
public function getSubscribedEvents()
{
return array(
'postPersist',
'postUpdate',
);
}
public function postPersist(LifecycleEventArgs $args)
{
$this->index($args);
}
public function postUpdate(LifecycleEventArgs $args)
{
$this->index($args);
}
在我的索引函数中,我需要做的是获取某个字段是否已更改,尤其是 issue.status 字段。
public function index(LifecycleEventArgs $args)
{
$document = $args->getEntity();
$originalData = $uow->getOriginalDocumentData($document);
$originalStatus = $originalData && !empty($originalData['issue']) ? $originalData['issue']->getStatus() : null;
var_dump($originalStatus);
var_dump($document->getIssue()->getStatus());die;
}
在我的测试中,我所做的是更改 issue.status 字段,因此我希望从 var_dump 收到 2 个不同的值,但我却从两者中获得了最后一个状态。
我的文档就是这样的:
class Payload
{
/**
* @ODM\Id
*/
private $id;
/**
* @ODM\EmbedOne(targetDocument="CoreBundle\Document\Issue\Issue")
* @Type("CoreBundle\Document\Issue\Issue")
*/
protected $issue;
}
在嵌入式问题文档中,状态只是一个文本字段。
我也尝试过使用变更集:
$changeset = $uow->getDocumentChangeSet($document);
foreach ($changeset as $fieldName => $change) {
list($old, $new) = $change;
}
var_dump($old->getStatus());
var_dump($new->getStatus());
这两个 var_dump 也返回相同的状态。
【问题讨论】:
标签: symfony doctrine-odm