如何重写Collection?

时间:2010-03-11 16:58:18

标签: magento collections

我想重写Mage::getResourceModel('sales/order_collection');

返回的集合

我的目标是重写此资源,以便我可以过滤掉特定商店的集合。

关于如何做的任何想法?我试着直接重写销售/订单模块的集合但没有成功。我能够重写销售/订单本身但不能重写集合,因为当我调用 getCollection()时它会返回

  

致命错误:调用未定义的方法   Mage_Sales_Model_Mysql4_Order :: getCollection()

1 个答案:

答案 0 :(得分:2)

我可以通过在config.xml中添加以下行来重写

<global>
<!-- -->
<models>
  <sales_mysql4>
            <rewrite>
<order_collection>Company_ModelName_Model_Mysql4_Order_Collection</order_collection>
            </rewrite>
   </sales_mysql4>
</models>
<!-- -->
</global>

然后我在Model / Mysql4 / Order文件夹中添加了类Collection.php,扩展了Mage_Sales_Model_Mysql4_Order_Collection

即使这会覆盖订单集合类,但在运行以下代码时会出现错误(在非对象上调用成员函数joinAttribute()):          Mage :: getResourceModel('sales / order_collection') - &gt; addAttributeToSelect('*') - &gt; joinAttribute('billing_firstname','order_address / firstname','billing_address_id',null,'left');

如果将上述行重新排列为以下3行,则不会出错:

$ collection = Mage :: getResourceModel('sales / order_collection'); $收藏 - &GT; addAttributeToSelect( '*');
$ collection-&gt; joinAttribute('billing_firstname','order_address / firstname','billing_address_id',null,'left');

我认为这是Magento中的一个错误。你怎么想?

谢谢Margots