Mengapa Magento menyimpan kembali alamat pelanggan yang ada saat checkout?

16

Selama proses checkout bahkan jika pelanggan memilih alamat yang sudah ada, drop-down customer_addressentitas sedang disimpan kembali. Tahu untuk apa?

Memperbarui:

Dimulai di Mage_Checkout_Model_Type_Onepage::saveOrdertempat kode berikut dijalankan:

$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();

submitAllPanggilan ini Mage_Sales_Model_Service_Quote::submitOrderyang mengeksekusi berikut:

$transaction->save();

Metode ini melewati semua objek kutipan (?) Dan menyimpannya.

Memperbarui:

Hal yang paling menjijikkan adalah mereka melakukannya untuk semua alamat yang dimiliki pelanggan. Jadi, jika pengunjung Anda mendapatkan 10 alamat yang disimpan di buku alamat, semuanya akan disimpan kembali selama checkout. Jangan heran mengapa ini adalah bagian Magento yang paling banyak menghabiskan sumber daya.

pengguna487772
sumber
Di dalam customer_address_entityatau di kutipan?
Matthias Kleine
Maaf, tidak yakin apa yang Anda maksud. The customer_addressentitas sedang disimpan selama menempatkan pesanan. Tidak ada koneksi untuk mengutip.
user487772
1
Bisakah Anda memberikan kode yang melakukan ini? Ini akan menyelamatkan saya dari kesulitan mencari
Marius
Memperbarui pertanyaan.
user487772
@Tim Saya kira jawabannya karena mereka tidak memikirkannya akan menjadi jawaban yang dapat diterima;) Dugaan saya adalah bahwa mereka tidak ingin memeriksa apakah alamat itu ada sehingga akan lebih mudah / malas untuk menyimpan semuanya. Tapi hanya menebak
David Manners

Jawaban:

6

Biasanya, kecuali data telah berubah pada suatu model, memanggil save () tidak akan menyebabkan model disimpan kembali .
Ini pasti asumsi selama menerapkan logika dengan cara ini.

Namun, karena metode model alamat penawaran _beforeSave()menetapkan ID penawaran, ID pelanggan, dan mungkin juga ID alamat pelanggan dan same_as_billingproperti melalui _populateBeforeSaveData()metode ini, perlindungan terhadap penghematan yang tidak perlu dihindari.

Perbaikan mudah dalam metode populateBeforeSaveData()ini adalah untuk memeriksa apakah nilai yang akan ditetapkan pada model alamat sudah ada pada model saat ini dengan nilai yang sama.

Untungnya, alamat kutipan disimpan dalam tabel datar, yang berarti penghematannya cukup efisien. Dan kecuali untuk beberapa toko B2B saya belum mengalami pelanggan memiliki lebih dari beberapa alamat.

Vinai
sumber
2

Saya akan menebak bahwa ini tidak dipikirkan.

Mungkin dianggap bahwa daripada memperbarui alamat baru ditambah perubahan dalam penagihan default dan alamat pengiriman akan lebih mudah hanya untuk menyimpan semuanya, karena orang tidak akan memiliki banyak alamat dan checkout sudah lambat orang tidak akan memperhatikan .... banyak .

Catatan: ini hanya sebuah ide tapi saya pikir ini layak untuk dibagikan, saya juga bisa membayangkan diri saya membuat asumsi yang sama :(

David Manners
sumber
0

simpan alamat selama checkout dilakukan oleh _afterSave () - Metode dalam model sumber daya pelanggan.

protected function _afterSave(Varien_Object $customer)
{
    $this->_saveAddresses($customer);
    return parent::_afterSave($customer);
}

seingat saya model pelanggan akan disimpan selama penempatan pesanan.

Bersulang

sbothner_mzentrale
sumber
Ya, itu sudah jelas. Pertanyaannya adalah "Untuk apa?".
user487772
@ Tim: umum menurut saya. Tidak ada alasan jelas untuk checkout atm.
sbothner_mzentrale
@Tim: Misalnya saveAction di admin membutuhkan perilaku ini.
sbothner_mzentrale
Untuk apa dibutuhkan?
user487772