Хранение атрибутов товара с заказами в Magento - PullRequest
0 голосов
/ 18 октября 2011

Я ищу решение для хранения атрибутов товара с каждым заказом. По сути, мне нужно хранить уникальный номер партии товара для каждого товара, который затем можно будет найти во внешнем интерфейсе, чтобы выяснить, какие заказы содержали товары из определенной партии. Первоначально я думал сделать это с атрибутами товара и сохранить атрибут с каждым товаром в заказе.

Кто-нибудь имеет лучшее решение или может указать мне правильное направление для реализации этого решения?

Редактировать: Все еще ищем решение для этого

1 Ответ

0 голосов
/ 12 декабря 2011

Я согласен, что номер партии должен быть атрибутом продукта, но вам не нужно хранить его дважды. Просто присоедините его к таблице заказов, когда вам это понадобится позже - таким образом, информация будет обновляться (если вы не хотите знать, какой она была на момент заказа, и в этом случае это все неправильно).

К сожалению, таблицы заказов сглажены, а не 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...