В процессе оформления заказа, даже если клиент выбирает существующий адрес из раскрывающегося списка, customer_address
сущность повторно сохраняется. Есть идеи для чего?
Обновить:
Он начинается Mage_Checkout_Model_Type_Onepage::saveOrder
там, где выполняется следующий код:
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
Это submitAll
вызовы, Mage_Sales_Model_Service_Quote::submitOrder
которые выполняют следующее:
$transaction->save();
Этот метод перебирает все объекты в кавычках (?) И сохраняет их.
Обновить:
Самое отвратительное в том, что они делают это по всем адресам клиентов. Таким образом, если ваш посетитель получит 10 адресов, сохраненных в адресной книге, все они будут повторно сохранены во время оформления заказа. Не удивляйтесь, почему это самая ресурсоемкая часть Magento.
customer_address_entity
или в цитате?customer_address
сохраняется во время размещения заказа. Нет связи, чтобы цитировать.Ответы:
Обычно, если данные в модели не изменились, вызов метода save () не приведет к повторному сохранению модели .
Это должно быть предположение при реализации логики таким образом.
Однако, поскольку метод модели адреса котировки
_beforeSave()
устанавливает идентификатор цитаты, идентификатор клиента плюс, возможно, идентификатор адреса клиента иsame_as_billing
свойство с помощью_populateBeforeSaveData()
метода, защита от ненужного сохранения обходится.Простым исправлением в методе
populateBeforeSaveData()
было бы проверить, будут ли значения, которые должны быть установлены в модели адреса, уже присутствовать в текущей модели с тем же значением.К счастью, адреса в кавычках хранятся в плоской таблице, что означает, что сохранение довольно эффективно. И за исключением некоторых магазинов B2B, у меня не было опытных клиентов, у которых было больше пары адресов.
источник
Я рискнул бы предположить, что это не было продумано.
Возможно, считалось, что вместо обновления любого нового адреса плюс какого-либо изменения адреса выставления счета и доставки по умолчанию было бы проще просто сохранить все, так как у людей не будет такого количества адресов, а оформление заказа уже медленное, люди не заметят .... много ,
Примечание: это просто идея, но я подумал, что стоит поделиться, и я могу представить, что делаю те же предположения :(
источник
сохранение адреса во время оформления заказа осуществляется с помощью _afterSave () - метода в модели ресурсов клиента.
насколько я помню модель клиента сохраняется во время размещения заказа.
ура
источник