我正在寻找每个订单存储产品属性的解决方案。基本上我需要为每个产品存储一个唯一的产品批号,然后可以在前端搜索,以找出哪些订单包含来自特定批次的产品。我最初的想法是使用产品属性执行此操作,并将每个产品的属性存储在订单中。
是否有人有更好的解决方案或能指出我正确的方向来实施此解决方案?
编辑:仍在寻找解决方案
答案 0 :(得分:0)
我同意批号应该是产品属性,但您不需要存储两次。只需在以后需要时将它与订单表一起加入 - 这样信息就会保持最新(除非你想知道订购时它是什么,在这种情况下这都是错误的。)
不幸的是订单表是扁平化的,而不是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()
。