Magento自动订单状态 - 获取order_status / state列表

时间:2013-01-24 21:20:03

标签: events magento model status

我正在尝试构建一个观察某些事件的Magento模块,并尝试根据付款方式自动进入新的自动状态/状态。
为了做到这一点,我根据付款方式在后台组织了一些状态。例如:

事件:sales_order_place_after
自动状态:pp_1_pending - 第一个状态/状态,如果付款方式为paypal,新下订单将自动具有此状态。

事件:sales_order_payment_pay
自动状态:pp_2_payment - 付款方式为paypal时支付订单后的第二个状态/状态

事件:sales_order_invoice_save_after
自动状态:pp_3_complete - 订单开票后的第三个和最终状态/状态,结束交易。

为此,我需要使用前缀pp_收集所有状态,并在检查订单上设置的状态后,按顺序进入下一个状态。这样,该模块可以扩展。

但是我似乎无法获得状态收集。我在尝试:
$statuses = Mage::getModel('sales/order_status')
->getCollection()
->addAttributeToSelect('status')
->addAttributeToSelect('label')
->addFieldToFilter('status',array('like','pp_'));

希望有人能帮助我。谢谢大家!

4 个答案:

答案 0 :(得分:1)

addAttributeToSelect()功能用于基于EAV的模型。对于平面模型,使用 addFieildToSelect()

代码应为

$statuses = Mage::getModel('sales/order_status')
->getCollection()
->addFieldToSelect('status')
->addFieldToSelect('label')
->addFieldToFilter('status',array('like'=>'pp_%'));

答案 1 :(得分:0)

如果看起来没问题,请查看生成的SELECT查询。

$collection->getSelect()->__toString();

答案 2 :(得分:0)

您必须在查询中使用通配符(%),因为您希望开始的状态与pp _:

$statuses = Mage::getModel('sales/order_status')  
        ->getCollection()  
        ->addAttributeToSelect('status')  
        ->addAttributeToSelect('label')  
        ->addFieldToFilter('status',array('like','pp_%'));

答案 3 :(得分:0)

如果有人想知道,要同时获得状态和状态,这里有一个功能:
private function _allStatusStateCollection($filter) {
$collection = Mage::getModel( 'sales/order_status' )
->getCollection()->joinStates();
if ($filter != '') { return $collection->addFieldToFilter('main_table.status',array('like'=>$filter.'%')); }
return $collection;
}