1

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

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

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

事件: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

4 回答 4

1

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

代码应该是

$statuses = Mage::getModel('sales/order_status')
->getCollection()
->addFieldToSelect('status')
->addFieldToSelect('label')
->addFieldToFilter('status',array('like'=>'pp_%'));
于 2013-01-25T07:53:30.547 回答
0

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

$collection->getSelect()->__toString();
于 2013-01-24T21:27:29.553 回答
0

您必须在查询中使用通配符 (%),因为您需要以 pp_开头的状态:

$statuses = Mage::getModel('sales/order_status')  
        ->getCollection()  
        ->addAttributeToSelect('status')  
        ->addAttributeToSelect('label')  
        ->addFieldToFilter('status',array('like','pp_%'));
于 2013-01-25T07:38:26.733 回答
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;
}

于 2013-01-25T23:23:19.710 回答