【问题标题】:Storing product attributes with orders in Magento在 Magento 中使用订单存储产品属性
【发布时间】:2011-10-18 18:40:13
【问题描述】:

我正在寻找一种解决方案来存储每个订单的产品属性。本质上,我需要为每个产品存储一个唯一的项目批号,然后可以在前端进行搜索,以找出哪些订单包含特定批次的产品。我最初的想法是对产品属性进行此操作,并将每个产品的属性存储在订单中。

有没有人有更好的解决方案,或者可以为我指出实施该解决方案的正确方向?

编辑:仍在寻找解决方案

【问题讨论】:

    标签: magento attributes product


    【解决方案1】:

    我同意批号应该是产品属性,但您不需要存储两次。当您以后需要它时,只需将其与订单表连接 - 这样信息就会保持最新(除非您想知道订购时它是什么,在这种情况下这是错误的)。

    不幸的是,订单表是扁平的,而不是 EAV,所以不要很好地处理属性。集合的joinAttribute() 方法是一个存根。您可以通过 query patterns library 解决这个问题(自我宣传免责声明;我在这里使用它是因为我编写了属性函数并且不想重做工作),然后使用特定于您的课程。

    class Knectar_Select_Product_Lot extends Knectar_Select_Product
    {
        public function __construct()
        {
            parent::__construct();
            $this->joinAttribute('lots', 'catalog_product', 'lot_number',
                'products.entity_id', 0, 'lot_number'
            );
        }
    
        public static function enhance(Varien_Db_Select $select, $tableName, $condition, $columns = null, $type = self::LEFT_JOIN)
        {
            $select->_join(
                $type,
                array($tableName => new self()),
                $condition,
                $columns ? $columns : 'lot_number'
            );
        }
    }
    

    enhance() 函数是最难的,你只需要调用它并按它的列过滤。

    $orderItems = Mage::getResourceModel('sales/order_item_collection');
    Knectar_Select_Product_Lot::enhance($orderItems->getSelect, 'lots', 'lots.product_id = main_table.product_id');
    $orderItems->addFieldToFilter('lot_number', 'ABC123');
    

    如果您在管理网格中使用该集合,那么它的列过滤器将为您执行 addFieldToFilter()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2017-09-25
      • 2015-12-30
      相关资源
      最近更新 更多