Durante o processo de checkout, mesmo que o cliente selecione o endereço existente no menu suspenso, a customer_address
entidade está sendo salva novamente. Alguma idéia para que?
Atualizar:
Começa Mage_Checkout_Model_Type_Onepage::saveOrder
onde o seguinte código é executado:
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
Isso submitAll
chama Mage_Sales_Model_Service_Quote::submitOrder
que executa o seguinte:
$transaction->save();
Este método percorre todos os objetos da citação (?) E os salva.
Atualizar:
O mais repugnante é que eles estão fazendo isso para todos os endereços que o cliente possui. Portanto, se seu visitante conseguir 10 endereços salvos no catálogo de endereços, todos eles serão salvos novamente durante o checkout. Não se pergunte por que é a parte que consome mais recursos do Magento.
customer_address_entity
ou na citação?customer_address
entidade está sendo salva durante a colocação do pedido. Sem conexão para citar.Respostas:
Normalmente, a menos que os dados sejam alterados em um modelo, chamar save () não fará com que o modelo seja salvo novamente .
Essa deve ter sido a suposição durante a implementação da lógica dessa maneira.
No entanto, como o método do modelo de endereço de cotação
_beforeSave()
define o ID da cotação, o ID do cliente e, possivelmente, o ID do endereço do cliente e asame_as_billing
propriedade por meio do_populateBeforeSaveData()
método, a proteção contra economia desnecessária é contornada.Uma solução fácil no método
populateBeforeSaveData()
seria verificar se os valores a serem definidos no modelo de endereço já estão presentes no modelo atual com o mesmo valor.Felizmente, os endereços de cotação são armazenados em uma tabela plana, o que significa que o salvamento é bastante eficiente. E, exceto em algumas lojas B2B, não tenho clientes com mais de dois endereços.
fonte
Eu arriscaria um palpite de que isso não foi pensado.
Talvez se tenha pensado que, em vez de atualizar qualquer novo endereço mais qualquer alteração no endereço de cobrança e envio padrão, seria mais fácil salvar tudo, já que as pessoas não têm tantos endereços e o check-out já é lento, as pessoas não notam .... muito .
Nota: esta é apenas uma ideia, mas achei que vale a pena compartilhar, também posso me imaginar fazendo as mesmas suposições :(
fonte
o salvamento de endereço durante a finalização da compra é feito por _afterSave () - método no modelo de recursos do cliente.
como eu me lembro do modelo do cliente ser salvo durante a colocação do pedido.
Felicidades
fonte