Я согласен, что номер партии должен быть атрибутом продукта, но вам не нужно хранить его дважды. Просто присоедините его к таблице заказов, когда вам это понадобится позже - таким образом, информация будет обновляться (если вы не хотите знать, какой она была на момент заказа, и в этом случае это все неправильно).
К сожалению, таблицы заказов сглажены, а не EAV, поэтому не очень хорошо обрабатывают атрибуты. Метод joinAttribute()
коллекции является заглушкой. Вы можете обойти это с помощью этой библиотеки шаблонов запросов ( отказ от саморекламы ; я использую ее здесь, потому что я написал функции атрибута и не хочу повторять работу) и затем расширив его классом, специфичным для вас.
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()
.