2011-03-18 5 views
1

현재 로그인 한 고객이 주문한 적이 있는지 프로그래밍 방식으로 신속하게 확인할 수 있습니까? 나는 관찰자를 쓰고 있는데, 간단히 말하고 싶다.Magento - 고객의 첫 번째 주문 확인

if ($this->isCustomerLoggedIn() && (has never placed an order)) 
{ 
do this 
} 

가능합니까? 감사합니다. 위의

답변

15
$orders = Mage::getResourceModel('sales/order_collection') 
    ->addFieldToSelect('*') 
    ->addFieldToFilter('customer_id', $customer->getId()); 

if ($this->isCustomerLoggedIn() && (!$orders->getSize())) 
{ 
    // has never placed an order 
} 

당신이 $customer이 있다고 가정하지만 이벤트에서 액세스 할 수없는 경우는 일반적으로 현재와 고객에 기록받을 수 있습니다

$customer = Mage::getSingleton('customer/session')->getCustomer(); 
+0

... 감사합니다. – bonhommie

+0

확실히 작동하는 것처럼 보입니다.하지만 카운트를 얻으려는 경우 잠재적으로 많은 수의 완전한 개체를 검색하는 대신 해당 개수를 쿼리하는 방법이 있다는 것을 기억하는 것 같습니다. 최소한 네트워크 대기 시간을 최소화하기 위해 선택한 필드를 order_id로 줄일 수 없었습니까? –

+1

@Joseph -'getSize()'는 내부의'getSelectCountSql()'메서드를 사용하여 페이징이나 제한없이 카운트를 가져옵니다. 요청 된 유일한 필드는'*'이므로'COUNT (*)'가됩니다. 그것은 객체를로드하는 콜렉션의'count()'입니다. – clockworkgeek

0

당신이 이벤트를 생성해야합니까?

$session = Mage::getModel('customer/session'); 
$order = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('customer_id',$session->getId())->getFirstItem(); 
관련 문제