gpt4 book ai didi

php - 如何复制客户地址?

转载 作者:搜寻专家 更新时间:2023-10-31 21:37:57 27 4
gpt4 key购买 nike

当客户第一次输入地址时,该地址将用作账单送货地址。但是数据库中只有一个条目。因此,如果客户后来决定通过编辑现有地址来更改送货地址,那么帐单地址也会更改。为防止这种情况,我需要在数据库中添加两个单独的条目,一个用于帐单地址,一个用于送货地址。因此,

我使用事件 customer_address_save_after 编写了一个事件观察器来检查默认账单地址条目是否与默认送货地址条目相同。如果是这样,将保存此地址的副本作为新的送货地址。好吧,至少这是个主意,

public function customerAddressSaveAfter($observer)
{
$session = Mage::getSingleton('customer/session');

if ($session->getCustomer()->getDefaultBilling() ==
$session->getCustomer()->getDefaultShipping())
{
$address = $observer->getCustomerAddress();

$address->unsAddressId()
->unsAddressType();

Mage::getModel('customer/address')
->setData($address->getData())
->setIsDefaultShipping('1')
->setSaveInAddressBook('1')
->save();
}

return $this;
}

但是运行代码似乎会导致无限循环,直到内存耗尽。我做错了什么?

最佳答案

这里的问题是无限递归,因为您在“客户/地址”保存事件中保存“客户/地址”。

在副本上设置一些属性,并在保存前检查它:

public function customerAddressSaveAfter($observer)
{
$address = $observer->getCustomerAddress();
if ($address->getIsDuplicate()) {
return $this;
}

$session = Mage::getSingleton('customer/session');

if ($session->getCustomer()->getDefaultBilling() ==
$session->getCustomer()->getDefaultShipping())
{
$address->unsAddressId()
->unsAddressType();

Mage::getModel('customer/address')
->setData($address->getData())
->setIsDefaultShipping('1')
->setSaveInAddressBook('1')
->setIsDuplicate(true)
->save();
}

return $this;
}

关于php - 如何复制客户地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14781747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com