Magento在下订单后将客户与订单关联

Magento在下订单后将客户与订单关联,magento,Magento,我的自定义模块在事件后观察sales\u order\u place\u,并通过为订单设置customerId来创建客户并将客户与订单关联 什么有效? 下单 创建客户 将在订单数据库中更新客户ID 什么不起作用? 另一个脚本会立即将customerId设置回NULL 在我的观察者完成运行后,我如何找出是什么脚本将customerId再次更新为NULL。您应该将事件更改为销售\型号\服务\报价\提交\成功 示例代码(Magento 2版本):events.xml <event nam

我的自定义模块在事件后观察
sales\u order\u place\u,并通过为订单设置
customerId
来创建客户并将客户与订单关联

什么有效?

  • 下单
  • 创建客户
  • 将在订单数据库中更新
    客户ID
什么不起作用?

  • 另一个脚本会立即将
    customerId
    设置回
    NULL

在我的观察者完成运行后,我如何找出是什么脚本将
customerId
再次更新为
NULL

您应该将事件更改为销售\型号\服务\报价\提交\成功

示例代码(Magento 2版本):events.xml

<event name="sales_model_service_quote_submit_success">
        <observer name="quote_submit_success_observer" instance="Namespace\ModuleName\Observer\GenerateObserver" />
    </event>

我也有同样的问题-我的假设是,对订单调用
save
方法会触发
sales\u order\u save\u在
事件之前/之后监听的内容,其中之一是将客户ID设置回
null
。我通过只保存我想要的属性来解决这个问题,而不是触发整个订单的保存:

$order
    ->setCustomerId($customer->getId())
    ->setCustomerIsGuest(0)
    ->setCustomerGroupId($customer->getGroupId());

$order->getResource()
    ->saveAttribute($order, 'customer_id'      )
    ->saveAttribute($order, 'customer_is_guest')
    ->saveAttribute($order, 'customer_group_id');

这使我能够使用
销售\模型\服务\报价\提交\成功
事件将客户与Magento EE 1.14.3.10中的订单成功关联。

您好,您是否已将客户设置为来宾0@faizanbeg我从一个独立的文件中测试了我的代码,它可以正常工作。仅当从事件执行时,它将再次覆盖
customerId
NULL
。设置
customerId
的脚本是:
$order->setCustomerId($customer->getId())->setCustomerIsGuest(0)->setCustomerGroupId(1)。您将在magento.stackexchange.com获得更好的响应。但是,如果没有其他缓存/明显问题,magento在排序处理步骤中使用有限状态机。也可能有帮助。在IDE中设置断点,以便在代码执行时逐步完成代码可能会有所帮助。@DutA。这是不可能的,因为我知道目前没有一个PHP编辑器能够像Magento这样使用框架。无论如何都尝试了该事件,但结果与以前相同。您可能知道Magento 1.9的其他解决方案吗?我仍然可以奖励赏金作为奖励。我没有本地代码M1.9的示例。我无法继续。您是否尝试使用默认Magento?默认Magento是什么意思?我在我的开发安装中尝试了这一点。您的回答很有道理,因为
save()
函数是唯一可能使客户改变的原因。我要试试!
$order
    ->setCustomerId($customer->getId())
    ->setCustomerIsGuest(0)
    ->setCustomerGroupId($customer->getGroupId());

$order->getResource()
    ->saveAttribute($order, 'customer_id'      )
    ->saveAttribute($order, 'customer_is_guest')
    ->saveAttribute($order, 'customer_group_id');