【问题标题】:How to rewrite Collection?如何重写集合?
【发布时间】:2011-01-26 11:40:36
【问题描述】:

我想重写Mage::getResourceModel('sales/order_collection');返回的集合

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

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

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

【问题讨论】:

    标签: magento collections


    【解决方案1】:

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

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

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

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

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

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

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

    谢谢玛戈

    【讨论】:

    • 这不是错误...当我覆盖方法 addAttributeToSelect() 时,我调用了 parent::addAttributeToSelect() 但从未返回它。因此,通过在 parent::addAttributeToSelect() 前面添加 'return' 来解决这个问题
    猜你喜欢
    • 2015-11-30
    • 2013-08-16
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多