У меня есть код, написанный для создания или обновления адреса для клиента. Создать адрес работает, как ожидалось, однако обновить адрес дает мне следующую ошибку 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
, CONSTRAINTFK_CUSTOMER_ADDRESS_ENTITY_PARENT_ID_CUSTOMER_ENTITY_ENTITY_ID
FOREIGN KEY (parent_id
) REFERENCEScustomer_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());
}
Что я здесь делаю неправильно?
Хорошо, я установил, что на моем «Обновление» обработчика действий очереди и теперь я больше не получаю сообщение об ошибке - вместо того, чтобы новый адрес становится создано , Почему он не обновляет загруженный адрес? – Latheesan
Возможно, адрес с id 'intval ($ address_info-> MagentoId)' не существует – Marius