我正在尝试构建一个观察某些事件的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_'));
希望有人能帮助我。谢谢大家!
答案 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;
}