2011-03-18 22 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 2011-03-18 21:14:58

+0

絕對似乎工作,但如果我們只是想獲得一個計數,我似乎記得有一種方法來查詢該計數,而不是檢索可能大量的完整對象。至少,難道你不能將你選擇的字段縮減爲order_id,以儘量減少網絡延遲? – 2011-03-18 23:35:17

+1

@Joseph - getSize()使用內部的getSelectCountSql()方法來檢索沒有任何分頁或限制的計數。唯一要求的字段是'*',以便它變成'COUNT(*)'。它是加載對象的集合'count()'。 – clockworkgeek 2011-03-19 01:02:49

0

你需要創建一個事件?

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