Magento 1: Relação entre qty no item de estoque e tabelas de status de estoque

8

No Magento 1, as informações de inventário são armazenadas em um objeto Item de estoque. Cada objeto de item de estoque está associado a um objeto de produto. O Magento persiste os objetos de Item de Estoque na cataloginventory_stock_itemtabela.

No entanto, cada objeto Item de estoque tem um objeto Status de estoque relacionado. O status do estoque parece ser uma tabela (índice | cache | desnormalizada) que armazena o status do estoque de um produto como uma constante inteira e permite associar vários itens e produtos de estoque a um diferente website_id. O Magento persiste objetos de status de estoque para o cataloginventory_stock_status. As constantes de classe e o esquema da tabela para isso estão abaixo.

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)

No entanto , por motivos que não são totalmente claros, também há uma qtycoluna nesta tabela.

Qual é a relação entre essas duas qtycolunas?

Qual é a fonte da verdade qtye qual é o valor indexado / em cache? O valor está stock_statussimplesmente em uma versão em cache do que está na tabela de itens de estoque? Ou existe uma maneira de configurar o Magento para gerenciar o estoque no nível de um site? Ou o relacionamento é algo diferente do que eu descrevi?

Alan Storm
fonte
11
Além disso, o campo is_in_stock da tabela de itens de estoque é ignorado na página de visualização do produto.
MagePsycho
Apenas para anotar - uma coisa que notei é que, se um produto está em espera, a quantidade pode ir <0 em cataloginventory_stock_item, no entanto, cataloginventory_stock_status nunca ficará abaixo de 0. Entretanto, não sei por que ele se comporta assim.
mpchadwick

Respostas:

7

Parece-me que qty in cataloginventory_stock_itemé a fonte da verdade e qty in cataloginventory_stock_statusé o valor em cache / indexado. A recriação do índice de status da ação parece sempre copiar o valor de cataloginventory_stock_itempara cataloginventory_stock_status. Se houver vários sites, também haverá um registro para cada combinação product_id / website_id cataloginventory_stock_status. Isso sugere a possibilidade de diferentes níveis de estoque por site, mas até onde eu sei, o valor da quantidade é sempre o mesmo para cada um.

Acho que esse pode ser o começo de um recurso de várias ações, conforme sugerido por Marius neste post: O objetivo da tabela cataloginventory_stock

Zeke Farwell
fonte