2011-10-18 58 views
0

我正在尋找一種解決方案來存儲每個訂單的產品屬性。實質上,我需要爲每個產品存儲一個獨特的產品批號,然後可以在前端搜索以找出哪些訂單包含來自特定批次的產品。我最初的想法是用產品屬性來做這件事,並按順序存儲每件產品的屬性。在Magento中保存包含訂單的產品屬性

有沒有人有更好的解決方案,或可以指出我在實施這個解決方案的正確方向?

編輯:還在尋找一個解決這個

回答

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()