Podczas realizacji transakcji, nawet jeśli klient wybierze istniejący adres z menu rozwijanego, customer_address
jednostka jest ponownie zapisywana. Masz pomysł po co?
Aktualizacja:
Zaczyna się w Mage_Checkout_Model_Type_Onepage::saveOrder
miejscu wykonania następującego kodu:
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
Te submitAll
rozmowy Mage_Sales_Model_Service_Quote::submitOrder
, który wykonuje następujące czynności:
$transaction->save();
Ta metoda zapętla wszystkie obiekty cytatu (?) I zapisuje je.
Aktualizacja:
Najbardziej obrzydliwe jest to, że robią to dla wszystkich adresów, które posiada klient. Jeśli więc odwiedzający otrzyma 10 adresów zapisanych w książce adresowej, wszystkie zostaną zapisane ponownie podczas realizacji transakcji. Nie zastanawiaj się, dlaczego jest to najbardziej pochłaniająca zasoby część Magento.
customer_address_entity
czy w cytacie?customer_address
jest zapisywany podczas składania zamówienia. Brak połączenia do wyceny.Odpowiedzi:
Zwykle, chyba że dane uległy zmianie w modelu, wywołanie na nim save () nie spowoduje ponownego zapisania modelu .
Musiało to być założenie podczas implementacji logiki w ten sposób.
Ponieważ jednak metoda modelu adresu wyceny
_beforeSave()
ustawia identyfikator wyceny, identyfikator klienta oraz ewentualnie identyfikator adresu klienta isame_as_billing
właściwość za pośrednictwem tej_populateBeforeSaveData()
metody, ochrona przed niepotrzebnym zapisywaniem jest obchodzona.Łatwym rozwiązaniem w tej metodzie
populateBeforeSaveData()
byłoby sprawdzenie, czy wartości, które mają być ustawione w modelu adresu, który jest już obecny w bieżącym modelu o tej samej wartości.Na szczęście adresy cytatów są przechowywane w płaskiej tabeli, co oznacza, że zapis jest dość wydajny. Poza niektórymi sklepami B2B nie spotkałem klientów posiadających więcej niż kilka adresów.
źródło
Zaryzykowałbym przypuszczenie, że nie zostało to przemyślane.
Może uważano, że zamiast aktualizować nowy adres plus zmianę domyślnego adresu rozliczeniowego i wysyłkowego, łatwiej byłoby po prostu zapisać wszystko, ponieważ ludzie nie będą mieli tak wielu adresów, a kasa jest już wolna, ludzie nie zauważą ... dużo .
Uwaga: to tylko pomysł, ale pomyślałem, że warto się nim podzielić, mogę też sobie wyobrazić, że mam takie same założenia :(
źródło
zapisywanie adresu podczas finalizacji odbywa się przez _afterSave () - Metoda w modelu zasobów klienta.
jak pamiętam model klienta zostaje zapisany podczas składania zamówienia.
Twoje zdrowie
źródło