เพราะเหตุใด Magento จึงบันทึกที่อยู่ลูกค้าที่มีอยู่ในระหว่างการชำระเงินอีกครั้ง?


16

ในระหว่างกระบวนการเช็คเอาต์แม้ว่าลูกค้าจะเลือกที่อยู่ที่มีอยู่แบบหล่นลงcustomer_addressเอนทิตีจะถูกบันทึกอีกครั้ง มีความคิดอะไร?

ปรับปรุง:

มันเริ่มต้นMage_Checkout_Model_Type_Onepage::saveOrderที่รหัสต่อไปนี้จะถูกดำเนินการ:

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

submitAllสายนี้Mage_Sales_Model_Service_Quote::submitOrderซึ่งดำเนินการดังต่อไปนี้:

$transaction->save();

วิธีการนี้จะวนรอบวัตถุทั้งหมดของอัญประกาศ (?) และบันทึกไว้

ปรับปรุง:

สิ่งที่น่าขยะแขยงที่สุดคือพวกเขาทำเพื่อที่อยู่ทั้งหมดที่ลูกค้ามี ดังนั้นหากผู้เข้าชมของคุณได้รับการบันทึก 10 ที่อยู่ในสมุดที่อยู่ทั้งหมดจะถูกบันทึกอีกครั้งในระหว่างการเช็คเอาต์ อย่าสงสัยเลยว่าทำไมมันถึงเป็นส่วนที่ใช้ทรัพยากรมากที่สุดของ Magento


ในcustomer_address_entityหรือในใบเสนอราคา?
Matthias Kleine

ขออภัยไม่แน่ใจว่าคุณหมายถึงอะไร customer_addressนิติบุคคลที่จะถูกบันทึกไว้ในระหว่างการวางคำสั่งซื้อ ไม่มีการเชื่อมต่อเพื่ออ้าง
user487772

1
คุณสามารถให้รหัสที่ทำสิ่งนี้ได้หรือไม่? มันจะช่วยให้ฉันมีปัญหาในการค้นหา
Marius

อัปเดตคำถาม
user487772

@ เวลาฉันเดาคำตอบเพราะพวกเขาไม่คิดว่ามันจะเป็นคำตอบที่ยอมรับได้;) ฉันเดาว่าพวกเขาไม่ต้องการตรวจสอบว่ามีที่อยู่หรือไม่ดังนั้นจะง่ายกว่าที่จะบันทึกทุกอย่าง เพียงเดาเท่านั้น
David Manners

คำตอบ:


6

Usualy เว้นแต่ข้อมูลที่มีการเปลี่ยนแปลงในรูปแบบเรียกเก็บบันทึก () มันจะไม่ทำให้เกิดรูปแบบที่จะเป็นอีกครั้งที่บันทึกไว้
สิ่งนี้จะต้องเป็นข้อสันนิษฐานระหว่างการใช้ตรรกะด้วยวิธีนี้

อย่างไรก็ตามเนื่องจากวิธีการของแบบจำลองที่อยู่เสนอราคาได้_beforeSave()ตั้งรหัสเสนอราคารหัสลูกค้ารวมถึงรหัสที่อยู่ลูกค้าและsame_as_billingทรัพย์สินผ่าน_populateBeforeSaveData()วิธีการการป้องกันการประหยัดที่ไม่จำเป็นนั้นถูกหลีกเลี่ยง

การแก้ไขที่ง่ายในวิธีpopulateBeforeSaveData()นี้คือการตรวจสอบว่าค่าที่จะตั้งค่าในโมเดลที่อยู่นั้นมีอยู่แล้วในโมเดลปัจจุบันที่มีค่าเดียวกัน

โชคดีที่ที่อยู่คำพูดจะถูกเก็บไว้ในตารางแบนซึ่งหมายความว่าการบันทึกมีประสิทธิภาพพอสมควร และยกเว้นร้านค้า B2B บางแห่งฉันไม่เคยมีลูกค้าที่มีที่อยู่เพิ่มขึ้นสองสามแห่ง


2

ฉันจะเสี่ยงเดาว่านี่ไม่ได้คิดผ่าน

บางทีก็คิดว่าแทนที่จะอัพเดทที่อยู่ใหม่ใด ๆ รวมถึงการเปลี่ยนแปลงใด ๆ ในการเรียกเก็บเงินและที่อยู่จัดส่งเริ่มต้นมันจะง่ายขึ้นเพียงแค่บันทึกทุกอย่างเนื่องจากผู้คนไม่มีที่อยู่มากมายและการชำระเงินช้าแล้ว .

หมายเหตุ: นี่เป็นเพียงความคิด แต่ฉันคิดว่ามันควรค่าแก่การแบ่งปันและฉันสามารถจินตนาการตัวเองว่ามีสมมติฐานเดียวกัน :(


0

การบันทึกที่อยู่ระหว่างการชำระเงินจะดำเนินการโดย _afterSave () - วิธีการในรูปแบบทรัพยากรของลูกค้า

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

เพราะฉันจำได้ว่ารูปแบบลูกค้าได้รับการบันทึกระหว่างการสั่งซื้อ

ไชโย


ใช่นั่นชัดเจน คำถามคือ "มีไว้เพื่ออะไร"
user487772

@ เวลา: ทั่วไปฉันคิดว่า ไม่มีเหตุผลที่น่าสังเกตสำหรับการชำระเงินด้วย ATM
sbothner_mzentrale

@Tim: ตัวอย่างเช่น saveAction ในผู้ดูแลระบบต้องการพฤติกรรมนี้
sbothner_mzentrale

มันต้องการอะไรเหรอ?
user487772
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.