【发布时间】:2011-10-18 18:40:13
【问题描述】:
我正在寻找一种解决方案来存储每个订单的产品属性。本质上,我需要为每个产品存储一个唯一的项目批号,然后可以在前端进行搜索,以找出哪些订单包含特定批次的产品。我最初的想法是对产品属性进行此操作,并将每个产品的属性存储在订单中。
有没有人有更好的解决方案,或者可以为我指出实施该解决方案的正确方向?
编辑:仍在寻找解决方案
【问题讨论】:
标签: magento attributes product
我正在寻找一种解决方案来存储每个订单的产品属性。本质上,我需要为每个产品存储一个唯一的项目批号,然后可以在前端进行搜索,以找出哪些订单包含特定批次的产品。我最初的想法是对产品属性进行此操作,并将每个产品的属性存储在订单中。
有没有人有更好的解决方案,或者可以为我指出实施该解决方案的正确方向?
编辑:仍在寻找解决方案
【问题讨论】:
标签: magento attributes product
我同意批号应该是产品属性,但您不需要存储两次。当您以后需要它时,只需将其与订单表连接 - 这样信息就会保持最新(除非您想知道订购时它是什么,在这种情况下这是错误的)。
不幸的是,订单表是扁平的,而不是 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()。
【讨论】: