Magento - 以编程方式更新现有地址

时间:2013-09-13 17:23:17

标签: magento

我编写了代码来为客户创建或更新地址。创建地址按预期工作,但更新地址给我以下SQL错误:

  

无法设置客户地址信息 - SQLSTATE [23000]:完整性   约束违规:1452无法添加或更新子行:异类   键约束失败(magedevcustomer_address_entity,CONSTRAINT   FK_CUSTOMER_ADDRESS_ENTITY_PARENT_ID_CUSTOMER_ENTITY_ENTITY_ID   FOREIGN KEY(parent_id)参考customer_entityentity_id)   ON DELETE)

这是我的代码:

// Determine Address Type
$is_default_billing  = 0;
$is_default_shipping = 0;
$addressType = intval($address_info->AddressType);
if ($addressType >= 0) {
    if ($addressType == 0) {
        $is_default_billing  = 1;
        $is_default_shipping = 1;
    } else if ($addressType == 1) {
        $is_default_billing  = 1;
    } else if ($addressType == 2) {
        $is_default_shipping = 1;
    }
}

// Parse Address Data
$address_data = array(
    'firstname'           => $address_info->Firstname,
    'lastname'            => $address_info->Lastname,
    'company'             => $address_info->Company,
    'street'              => array(
        0 => $address_info->AddressLine1,
        1 => $address_info->AddressLine2
    ),
    'city'                => $address_info->City,
    'region_id'           => '',
    'region'              => $address_info->Region,
    'postcode'            => $address_info->Postcode,
    'country_id'          => getCountryId($address_info->Country),
    'telephone'           => $address_info->Telephone,
    'is_default_billing'  => $is_default_billing,
    'is_default_shipping' => $is_default_shipping
);

// Anticipate Error
try
{
    // Get Customer Model
    $customAddress = Mage::getModel('customer/address');

    // Address Create Mode
    if ($address_info->QueueAction == 'Create')
    {
        // Create Address
        $customAddress->setData($address_data)
                      ->setCustomerId(intval($address_info->MagentoCustomerId))
                      ->setSaveInAddressBook(true)
                      ->save();
    }

    // Address Update Mode
    else if ($address_info->QueueAction == 'Update')
    {
        // Update Address
        $customAddress->load(intval($address_info->MagentoId));
        $customAddress->setData($address_data)
                      ->save();
    }

    // Resource Clean-Up
    $customAddress = null;

    // Success - Returns Queue Id Back
    API_Response(false, '', $address_info->QueueId);
}
catch (Exception $e)
{
    // Error
    API_Response(true, $e->getMessage());
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

很可能您正在尝试为不存在的客户设置地址 试试这个:

->setParentId(intval($address_info->MagentoCustomerId))

而不是

->setCustomerId(intval($address_info->MagentoCustomerId))