Magento 1: взаимосвязь между `кол-во` в позиции товара и таблицами состояния запаса

8

В Magento 1 информация инвентаризации сохраняется в объекте Stock Item. Каждый объект позиции товара связан с объектом продукта. Magento сохраняет объекты Stock Item на cataloginventory_stock_itemстоле.

Однако у каждого объекта позиции товара есть связанный объект состояния запаса. Складской статус представляется таблицей (index | cache | de-normalized), в которой хранится товарный статус товара в виде целочисленной константы, и который позволяет связать несколько товарных позиций и товаров с разными website_id. Magento сохраняет объекты состояния запасов в cataloginventory_stock_status. Константы класса и схема таблицы для этого приведены ниже.

class Mage_CatalogInventory_Model_Stock_Status extends Mage_Core_Model_Abstract
{
    const STATUS_OUT_OF_STOCK       = 0;
    const STATUS_IN_STOCK           = 1;
}

mysql> describe cataloginventory_stock_status;
+--------------+----------------------+------+-----+---------+-------+
| Field        | Type                 | Null | Key | Default | Extra |
+--------------+----------------------+------+-----+---------+-------+
| product_id   | int(10) unsigned     | NO   | PRI | NULL    |       |
| website_id   | smallint(5) unsigned | NO   | PRI | NULL    |       |
| stock_id     | smallint(5) unsigned | NO   | PRI | NULL    |       |
| qty          | decimal(12,4)        | NO   |     | 0.0000  |       |
| stock_status | smallint(5) unsigned | NO   |     | NULL    |       |
+--------------+----------------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Однако по причинам, которые не совсем понятны, в этой таблице также есть qtyстолбец.

Какова связь между этими двумя qtyстолбцами?

Для чего нужен источник правды, а для qtyчего индексированное / кэшированное значение? Является ли значение stock_statusпросто в кешированной версии того, что находится в таблице товарных позиций? Или есть способ настроить Magento для управления запасами на уровне веб-сайта? Или эти отношения отличаются от того, что я описал?

Алан Сторм
источник
1
Кроме того, поле is_in_stock из таблицы stock-item игнорируется на странице просмотра товара.
MagePsycho
Просто для того, чтобы отметить - одна вещь, которую я заметил, это то, что если продукт может быть переназначен, количество в каталоге cataloginventory_stock_item может быть меньше 0, однако cataloginventory_stock_status никогда не опустится ниже 0. Однако я не знаю, почему он так себя ведет.
mpchadwick

Ответы:

7

Мне кажется, что qty in cataloginventory_stock_itemявляется источником истины, а qty in cataloginventory_stock_statusявляется кэшированным / проиндексированным значением. Похоже, перестройка индекса состояния запаса всегда копирует значение из cataloginventory_stock_itemв cataloginventory_stock_status. Если существует несколько веб-сайтов, для каждой комбинации product_id / website_id также будет запись cataloginventory_stock_status. Это предполагает возможность разных уровней запасов для каждого веб-сайта, но, насколько я могу судить, значение qty всегда одинаково для каждого.

Я думаю, что это может быть началом использования нескольких акций, как это было предложено Мариусом в этом посте: Цель таблицы cataloginventory_stock

Зик Фарвелл
источник