挂钩后的Magento地址保存&数据库更新

时间:2017-02-01 08:50:13

标签: php magento magento-1.9

我对magento hook "customer_address_save_after"& "address_save_after"。我要从这个钩子请求API,它从Magento数据库获取用户。不幸的是,此时,在数据库中是旧数据 - 尚未更新。

Magento中是否有任何钩子,允许我在数据库更新后发出请求?或者也许是将此钩子中的数据保存到数据库的任何方法?有点像$ customer-> save()?

public function afterAddressSave($observer)
{
    $customerAddress = $observer->getCustomerAddress();
    $customer = $customerAddress->getCustomer();

    if ($customer->getDefaultBillingAddress() && $customer->getDefaultBillingAddress()->getCountryId()) {
        Mage::helper('iwsettings')->setStoreId($customer, $customer->getDefaultBillingAddress()->getCountryId());
    }
    $this->updateTypo3UserData($customer);
}

1 个答案:

答案 0 :(得分:1)

我相信你有点困惑,在将数据提交到数据库之后会触发customer_address_save_after事件,但是如果你抛出异常或{{1},那么数据就不会“粘在”数据库中在你的观察者中,因为这会导致数据库“回滚保存”

die()

  • customer_address_save_after这是提交的地址
  • $observer->getCustomerAddress()在观察者中,通过传递Mage::getModel('customer/address')->load($id)的ID,我们可以看到与上面完全相同的数据

但是,如果您使用$observer->getCustomerAddress()->getEntityId()

  • customer_address_save_before这是提交的地址
  • 如果是新的话,
  • $observer->getCustomerAddress()将为空白,如果已修改,则会显示地址ID

这确实会让您知道如果地址是新的,您还不知道实体ID(直到保存后)。但是,当Observer作为单例加载时,您可以在观察者上设置一个标志,并在保存后稍后获取地址ID(它将在那里)。只要您的观察者不抛出异常或死亡,它就会保存到数据库中!

因此,对于您的查询,您可以使用$observer->getCustomerAddress()->getEntityId()(如果您想要客户的价值,还有一个customer_address_save_after)。只是确保没有抛出异常,即将代码包装在customer_save_after中,如果它引发异常,则会无声地失败。