Magento 1:库存项目中的数量与库存状态表之间的关系


8

在Magento 1中,库存信息存储在库存项目对象中。每个库存项目对象都与一个产品对象相关联。Magento将“库存物料”对象保留到cataloginventory_stock_item表中。

但是,每个库存项目对象都有一个相关的库存状态对象。库存状态似乎是一个(索引|非正规化)表,该表以整数常量存储产品的库存状态,并允许您将多个库存项目和不同的产品关联起来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字段。
MagePsycho

仅作说明-我注意到的一件事情是,如果某个产品可延期交货,则cataloginventory_stock_item中的数量可以小于0,但是cataloginventory_stock_status永远不会低于0。但是我不知道为什么会这样。
mpchadwick

Answers:


7

在我看来,数量cataloginventory_stock_item是事实的来源,数量cataloginventory_stock_status是缓存/索引值。重建库存状态索引似乎总是将其值复制cataloginventory_stock_item到中cataloginventory_stock_status。如果有多个网站,则中的每个product_id / website_id组合也会有一条记录cataloginventory_stock_status。这表明每个网站存在不同库存水平的可能性,但据我所知,每个站点的数量值始终相同。

我认为这可能是Marius在这篇文章中建议的多股票功能的开始: 表cataloginventory_stock的目的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.