getOperation()当Order被写入/更新时



我有一个关于OrderWrittenEvent订阅者的问题。我能够获得订单的操作,如果它被创建或更新。但现在我只得到一个"insert"即使我通过管理更新了现有的订单。

这个行为是有意的吗?如果是,我如何检查订单是否只是更新而不是新的?

public function onOrderWritten(EntityWrittenEvent $event): void
{
if ($event->getEntityName() !== OrderDefinition::ENTITY_NAME
|| $event->getWriteResults()[0]->getOperation() == 'update') {
return;
}
...

我希望有人能给我一些启示。:)谢谢,丹尼

当您在管理中编辑订单时,该订单将在新的版本id下被克隆(相同的数据,但作为新的数据库记录插入)。这就是为什么在期望进行更新操作的地方看到插入操作的原因。

一旦保存了订单的编辑,更新后的新版本和原始版本将合并为一条记录。这样做是为了对订单的更改进行版本化,并可以进行审查或还原。如果您需要找出插入/更新是否是订单的新版本,您可以检查版本id是否与实际版本不相同。这样你就会知道它不是一个实际的新订单,而是一个编辑的开始。

foreach ($event->getWriteResults() as $writeResult) {
$keys = $writeResult->getPrimaryKey();
$versionId = $keys['versionId'];
if ($versionId !== Defaults::LIVE_VERSION) {
// insert or update is part of the process of editing an order
}
}

最新更新