2011-10-18 17 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()を行いますです。

関連する問題