2013-05-13 7 views
7

tôi sử dụng dòng sau để tải tập hợp các đơn đặt hàng từ Magento:Lọc bộ sưu tập để Magento

// Load Order Collection 
$order_collection = Mage::getModel('sales/order')->getCollection(); 

Làm thế nào để bạn lọc bộ sưu tập này để bỏ qua đơn đặt hàng với tư cách "hủy bỏ" và "hoàn thành"?


Cập nhật

Sau khi gửi bài này, tôi đã chán vì vậy tôi đã làm một số đào bới xung quanh và sau này đã giúp tôi tìm ra đường đúng mã: http://www.magentocommerce.com/boards/v/viewthread/201797/#t287235

Đây là cách tôi giải quyết nó :

// Load Order Collection 
$order_collection = Mage::getModel('sales/order') 
->getCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('status', array('nin' => array('canceled','complete'))); 

Trả lời

11

Sử dụng phương pháp addFieldToFilter

$order_collection = Mage::getModel('sales/order')->getCollection()->addFieldToFilter('status', array('nin' => array('canceled','complete'))); 
+0

'nin' là viết tắt của 'không' bằng cách này. bạn có thể tìm danh sách các bộ lọc trong lớp sau: https://github.com/LokeyCoding/magento-mirror/blob/magento-1.7/lib/Varien/Data/Collection/Db.php - Kiểm tra nhận xét cho '_getConditionSql '. –

1

Nếu bạn muốn sử dụng các định nghĩa ban đầu:

$order_collection = Mage::getModel('sales/order')->getCollection() 
    ->addFieldToFilter('status', array('nin' => array(
     Mage_Sales_Model_Order::STATE_NEW, 
     Mage_Sales_Model_Order::STATE_CANCELED 
      ))); 

Giống như quy định tại Mage_Sales_Model_Order:

/** 
* Order states 
*/ 
const STATE_NEW    = 'new'; 
const STATE_PENDING_PAYMENT = 'pending_payment'; 
const STATE_PROCESSING  = 'processing'; 
const STATE_COMPLETE  = 'complete'; 
const STATE_CLOSED   = 'closed'; 
const STATE_CANCELED  = 'canceled'; 
const STATE_HOLDED   = 'holded'; 
const STATE_PAYMENT_REVIEW = 'payment_review';