체크 아웃 중에 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 2014 년

@Tim 나는 그들이 그것을 통해 생각하지 않은 대답 원인은 받아 들일만한 대답 일 것이라고 생각합니다. 단지 추측
David Manners

답변:


6

일반적으로 모델에서 데이터가 변경되지 않는 한 save ()를 호출하면 모델이 다시 저장되지 않습니다 .
이것은 이런 식으로 논리를 구현하는 동안의 가정이었습니다.

그러나 견적 주소 모델의 방법 _beforeSave()은 견적 ID, 고객 ID 및 가능하면 고객 주소 ID 및 방법을 same_as_billing통해 속성을 설정하므로 _populateBeforeSaveData()불필요한 저축에 대한 보호가 회피됩니다.

이 방법의 쉬운 수정 populateBeforeSaveData()은 주소 모델에서 설정하려는 값이 현재 모델에 이미 동일한 값으로 존재하는지 확인하는 것입니다.

다행스럽게도 따옴표 주소는 플랫 테이블에 저장되므로 저장이 상당히 효율적입니다. 그리고 일부 B2B 상점을 제외하고는 고객에게 두 개 이상의 주소를 가진 경험이 없습니다.


2

나는 이것이 생각되지 않았다고 추측 할 위험이 있습니다.

어쩌면 사람들은 많은 주소를 가지고 있지 않고 체크 아웃이 이미 느리기 때문에 새로운 주소와 기본 청구 및 배송 주소의 변경을 업데이트하는 대신 모든 것을 저장하는 것이 더 쉬울 것이라고 생각했을 수도 있습니다. .

참고 : 이것은 단지 아이디어 일뿐이지만 공유 할 가치가 있다고 생각했으며, 같은 가정을하고 있다고 상상할 수 있습니다.


0

체크 아웃 중 주소 저장은 고객 자원 모델의 _afterSave ()-방법에 의해 수행됩니다.

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

고객 모델이 주문 배치 중에 저장된다는 것을 기억합니다.

건배


그렇습니다. 문제는 "무엇을 위해?"입니다.
user487772 2016 년

@ 팀 : 일반 생각합니다. 체크 아웃 ATM의 이유는 없습니다.
sbothner_mzentrale

@Tim : 예를 들어 admin의 saveAction에는이 동작이 필요합니다.
sbothner_mzentrale

무엇이 필요합니까?
user487772
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.