2011-03-18 20 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();