如何在magento中更新客户地址

如何在magento中更新客户地址,magento,addressbook,Magento,Addressbook,我有这样的代码: public function editAddress($data, $id) { // $id - customer id, $data - data from form $customer = Mage::getModel('customer/customer') ->load($id); if (! $customer->getId() || ! $otherConditionIsValid) { re

我有这样的代码:

public function editAddress($data, $id)
{
    // $id - customer id, $data - data from form
    $customer = Mage::getModel('customer/customer')
        ->load($id);

    if (! $customer->getId() || ! $otherConditionIsValid) {
        return $this;
    }

    $dataShipping = array(
                    'firstname' => $data['firstname'],
                    'middlename' => $data['middlename'],
                    'lastname' => $data['lastname'],
                    'prefix' => $data['prefix'],
                    'suffix' => $data['suffix'],
                    'company' => $data['company'],
                    'street' => $data['street'],
                    'country_id' => $data['country'],
                    'city' => $data['city'],
                    'region_id' => '',
                    'region' => $data['region'],
                    'postcode' => $data['postal'],
                    'country_id' => $data['country'], 
                    'telephone' => $data['telephone'],
                    'fax' => $data['fax'],
    );

    $customerAddress = Mage::getModel('customer/address');

    if ($defaultShippingId = $customer->getDefaultShipping()){
        $customerAddress->load($defaultShippingId); 
    } else {   
        $customerAddress
            ->setCustomerId($post['customer_id'])
            ->setIsDefaultShipping('1')
            ->setSaveInAddressBook('1');   
        $customer->addAddress($customerAddress);
    }            

    try {
        $customerAddress
            ->addData($dataShipping)
            ->save();           
    } catch(Exception $e){
        Mage::log('Address Save Error::' . $e->getMessage());
    }

    return $this;
}

这是不更新数据库,但阵列数据我在magento中得到,我非常希望你能帮助我,thx我会对你的代码做一些小的调整。您可以在地址上尝试
setData
方法,而不是使用
addData
方法。我也会检查,以确保你得到一个有效的客户身份证从张贴。我也不认为这里有必要使用
addAddress
方法

//为客户生成帐单地址
$dataShipping=array(
'firstname'=>$data['firstname'],
“middlename”=>$data['middlename'],
'lastname'=>$data['lastname'],
'prefix'=>$data['prefix'],
'suffix'=>$data['suffix'],
“公司”=>$data[“公司”],
“街道”=>$data[“街道”],
“国家/地区id”=>$data[“国家/地区],
“城市”=>$data[“城市”],
'区域id'=>'',
'region'=>$data['region'],
'邮政编码'=>$data['postal'],
“国家/地区id”=>$data[“国家/地区],
“电话”=>$data[“电话”],
'fax'=>$data['fax'],
);
$customerAddress=Mage::getModel('customer/address');
如果($defaultShippingId=$customer->getDefaultShipping()){
$customerAddress->load($defaultShippingId);
}否则{
$customerAddress
->setCustomerId($post['customer\u id']))
->setIsDefaultBilling('0')
->setIsDefaultShipping('1')
->固定资产负债表(“1”);
}
试一试{
$customerAddress->setData($dataShipping);
$customerAddress->save();
}捕获(例外$ex){
Mage::log('地址保存错误::'。$e->getMessage());
}

我在日志中有这样的错误:地址保存错误::SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(
购物应用程序
客户地址实体
,约束
FK\U客户地址实体\U父ID\U客户实体\U实体\U实体ID
外键(
parent\u id
)在DE上引用了
customer\u entity
entity\u id
)。你能给我解释一下吗,你确定你从帖子中获得的客户id是有效的吗?我刚刚注意到,你得到的默认发货是这样的:$customer->getDefaultShipping(),但要获取ID,需要像这样获取$customer->getDefaultShipping()->getId(),否则将获取整个address对象,而不仅仅是ID,我认为您打算在这里使用ID。