我的自定义模块会观察sales_order_place_after事件,并通过设置订单来创建客户并将客户与订单相关联customerId.
什么有用?
customerId在订单数据库中更新什么不起作用?
customerId会立即NULL被另一个脚本重新设置我怎样才能找出脚本更新customerId到NULL 再次,我的观察者完成后运行?
您应该将事件更改为sales_model_service_quote_submit_success
示例代码(Magento 2 版本):events.xml
<event name="sales_model_service_quote_submit_success">
<observer name="quote_submit_success_observer" instance="Namespace\ModuleName\Observer\GenerateObserver" />
</event>
Run Code Online (Sandbox Code Playgroud)
生成观察者.php
...
public function execute(\Magento\Framework\Event\Observer $observer)
{
/** @var \Magento\Sales\Model\Order $order */
$order = $observer->getEvent()->getData('order');
// Ensure customer is registered
$this->registerCustomer($order);
$order->getResource()->save($order);
}
protected function registerCustomer(
\Magento\Sales\Api\Data\OrderInterface $order
) {
/** @var \Magento\Sales\Model\Order $order */
if ($order->getCustomerId() === null) {
// Load customer by email, create if not exists.
try {
$customerData = $this->customerRepository->get($order->getCustomerEmail());
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
$customerData = $this->orderCustomerManager->create($order->getId());
}
$order->setCustomerId($customerData->getId());
}
return $this;
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |