Au cours du processus de paiement, même si le client sélectionne une adresse existante, la liste déroulante de l' customer_address
entité est à nouveau enregistrée. Une idée pour quoi?
Mise à jour:
Il commence à l' Mage_Checkout_Model_Type_Onepage::saveOrder
endroit où le code suivant est exécuté:
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
Cet submitAll
appel Mage_Sales_Model_Service_Quote::submitOrder
exécute ce qui suit:
$transaction->save();
Cette méthode parcourt tous les objets du devis (?) Et les enregistre.
Mise à jour:
Le plus dégoûtant, c'est qu'ils le font pour toutes les adresses des clients. Donc, si votre visiteur obtient 10 adresses enregistrées dans le carnet d'adresses, toutes seront réenregistrées lors du paiement. Ne vous demandez pas pourquoi c'est la partie la plus consommatrice de ressources de Magento.
customer_address_entity
ou dans le devis?customer_address
entité est enregistrée lors de la commande. Aucun lien pour citer.Réponses:
Habituellement, sauf si les données ont changé sur un modèle, l'appel à save () ne provoquera pas la réenregistrement du modèle .
Cela devait être l'hypothèse lors de la mise en œuvre de la logique de cette façon.
Cependant, étant donné que la méthode du modèle d'adresse de devis
_beforeSave()
définit l'ID de devis, l'ID de client, plus éventuellement l'ID d'adresse de client et lasame_as_billing
propriété via la_populateBeforeSaveData()
méthode, la protection contre les économies inutiles est contournée.Une solution simple dans la méthode
populateBeforeSaveData()
serait de vérifier si les valeurs sur le point d'être définies sur le modèle d'adresse sont déjà présentes sur le modèle actuel avec la même valeur.Heureusement, les adresses de devis sont stockées dans une table plate, ce qui signifie que la sauvegarde est assez efficace. Et à l'exception de certains magasins B2B, je n'ai pas connu de clients ayant plus de quelques adresses.
la source
Je risquerais de deviner que cela n'a pas été réfléchi.
Peut-être pensait-on que plutôt que de mettre à jour une nouvelle adresse et tout changement d'adresse de facturation et d'expédition par défaut, il serait plus facile de tout enregistrer, car les gens n'auront pas autant d'adresses et le paiement est déjà lent, les gens ne le remarqueront pas ... beaucoup .
Remarque: ce n'est qu'une idée mais je pensais que cela valait la peine d'être partagé, je peux aussi m'imaginer faire les mêmes hypothèses :(
la source
la sauvegarde d'adresse lors du paiement est effectuée par _afterSave () - Méthode dans le modèle de ressource client.
si je me souviens, le modèle client est enregistré lors de la commande.
à votre santé
la source