2013-09-13 16 views
1

У меня есть код, написанный для создания или обновления адреса для клиента. Создать адрес работает, как ожидалось, однако обновить адрес дает мне следующую ошибку SQL:Magento - обновить существующий адрес программно

Failed To Set Customer Address Info - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (magedev . customer_address_entity , CONSTRAINT FK_CUSTOMER_ADDRESS_ENTITY_PARENT_ID_CUSTOMER_ENTITY_ENTITY_ID FOREIGN KEY (parent_id) REFERENCES customer_entity (entity_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()); 
} 

Что я здесь делаю неправильно?

ответ

0

Скорее всего, вы пытаетесь установить адрес для клиента, которого нет.
Попробуйте это:

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

Вместо того

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

Хорошо, я установил, что на моем «Обновление» обработчика действий очереди и теперь я больше не получаю сообщение об ошибке - вместо того, чтобы новый адрес становится создано , Почему он не обновляет загруженный адрес? – Latheesan

+0

Возможно, адрес с id 'intval ($ address_info-> MagentoId)' не существует – Marius

Смежные вопросы