への解決策を探していますが、二回それを格納する必要はありません。後で必要になったときにオーダーテーブルに参加してください - 情報が最新の状態に保たれます(オーダー時の内容を知りたい場合を除き、この場合はすべて間違っています)。
残念ながら、オーダーテーブルは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()
を行いますです。