Magento 1.9 – Filtering Sales/Order Collection by Country

collection;magento-1.9order-collection

I would like to filter out my home country (GB or United Kingdom) from the following sales/order collection. How can this be done?

$orders = Mage::getModel('sales/order')->getCollection()            
        ->addFieldToSelect('entity_id')
        ->addFieldToFilter('status', 'complete')
        ->setOrder('created_at', 'desc')
            ->setPageSize(40); // Last 40 Orders

Best Answer

Looks like the query below may do the trick for you:

 /** @var Mage_Core_Model_Resource $resource
*/
$resource = Mage::getSingleton('core/resource');
$orders = Mage::getModel('sales/order')->getCollection()
                ->addFieldToSelect('entity_id')
                ->addFieldToFilter('status', 'complete')
                ->setOrder('created_at', 'desc')
                ->setPageSize(40); // Last 40 Orders

$orders->join('order_address',
                'main_table.entity_id=order_address.parent_id',
                ['address_type', 'country_id']);
$orders->addAttributeToFilter('order_address.address_type', 'shipping');
$orders->addAttributeToFilter('order_address.country_id', 'GB');
Related Topic