Selbst wenn der Kunde während des Bestellvorgangs eine vorhandene Adresse aus dem Dropdown-Menü auswählt, wird die customer_address
Entität erneut gespeichert. Irgendeine Idee wofür?
Aktualisieren:
Es beginnt dort, Mage_Checkout_Model_Type_Onepage::saveOrder
wo der folgende Code ausgeführt wird:
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
Dies submitAll
ruft Mage_Sales_Model_Service_Quote::submitOrder
folgendes auf:
$transaction->save();
Diese Methode durchläuft alle Objekte des Zitats (?) Und speichert sie.
Aktualisieren:
Das Ekelhafteste ist, dass sie es für alle Kundenadressen tun. Wenn Ihr Besucher also 10 Adressen im Adressbuch gespeichert bekommt, werden diese beim Auschecken erneut gespeichert. Wundern Sie sich nicht, warum dies der ressourcenintensivste Teil von Magento ist.
customer_address_entity
oder im Zitat?customer_address
Entität wird während der Bestellung gespeichert. Keine Verbindung zum Angebot.Antworten:
Normalerweise wird das Modell nicht erneut gespeichert , es sei denn, die Daten eines Modells haben sich geändert, wenn save () aufgerufen wird .
Dies muss die Annahme bei der Implementierung der Logik auf diese Weise gewesen sein.
Da die Methode des
_beforeSave()
Angebotsadressmodells jedoch die Angebots-ID, die Kunden-ID sowie möglicherweise die Kunden-Adress-ID und diesame_as_billing
Eigenschaft über die Methode festlegt_populateBeforeSaveData()
, wird der Schutz vor unnötigem Speichern umgangen.Eine einfache Lösung in der Methode besteht
populateBeforeSaveData()
darin, zu überprüfen, ob die zu setzenden Werte im Adressmodell bereits im aktuellen Modell mit demselben Wert vorhanden sind.Glücklicherweise werden Angebotsadressen in einer flachen Tabelle gespeichert, was bedeutet, dass das Speichern ziemlich effizient ist. Und mit Ausnahme einiger B2B-Geschäfte habe ich keine Kunden mit mehr als ein paar Adressen erlebt.
quelle
Ich würde eine Vermutung riskieren, dass dies nicht durchdacht wurde.
Vielleicht wurde angenommen, dass es einfacher ist, alle Daten zu speichern, anstatt eine neue Adresse zu aktualisieren und die Standard-Rechnungs- und Lieferadresse zu ändern, da die Leute nicht so viele Adressen haben und die Kasse bereits langsam ist. Die Leute werden es nicht bemerken .
Hinweis: Dies ist nur eine Idee, aber ich dachte, es lohnt sich zu teilen, und ich kann mir vorstellen, die gleichen Annahmen zu treffen :(
quelle
Das Speichern der Adresse beim Auschecken erfolgt durch _afterSave () - Methode im Kundenressourcenmodell.
wie ich mich erinnere, wird das Kundenmodell bei der Bestellung gespeichert.
Prost
quelle