同一实体的数据库中的多行
最近更新: 2025年10月2日
本文提供了针对数据库中同一实体 ID 存在多行的问题的解决方案。
描述
受影响的产品和版本
Adobe Commerce(所有版本)
问题
数据库中同一实体ID有多个行。
例如,在运行此查询时收到具有重复实体ID的记录列表后:
SELECT * FROM $entityTable WHERE $column = <$entityID> ORDER BY created_in;
其中$entityID = ID个类别/产品/购物车价格规则/目录价格规则/CMS页面。
| 实体 | $entityTable | $column |
|---|---|---|
| 类别/产品 | catalog_category_entity / catalog_product_entity | entity_id |
| 购物车价格规则/目录价格规则 | salesrule / catalogrule | rule_id |
| CMS页面 | cms_page | page_id |
原因
这是预期行为。 内容暂存功能可创建多行。
如果指定的开始日期没有结束日期,则至少有两行具有相同的实体/规则/页面ID。 一行表示实体的原始状态(created_in=1所在的行),一行表示计划更新的*结束*。
如果指定了带有结束日期的开始日期,则至少会有三行具有相同的实体/规则/页面ID。 一行表示实体的原始状态(created_in=1所在的行),一行表示计划更新的*开始*,一行表示计划更新的*结束*。
例如,在此查询中:
SELECT row_id, entity_id, created_in, updated_in FROM catalog_product_entity WHERE entity_id = 483 ORDER BY created_in;
| row_id | entity_id | created_in | update_in |
|---|---|---|---|
| 2049 | 483 | 1 | 1540837826 |
| 483 | 483 | 1540837826 | 1540837842 |
| 2052 | 483 | 1540837826 | 2147483647 |
| 2051 | 483 | 1540837842 | 2147483647 |
created_in和updated_in值应遵循以下模式:当前行的created_in值等于上一行的updated_in值。 此外,第一行应包含created_in = 1,最后一行应包含updated_in = 2147483647。 (如果只有一行,则必须看到created_in=1和updated_in=2147483647)。
为什么第二个数据库条目(以及所有后续条目)出现在同一实体的DB中?
受影响实体的第二条DB记录(可能还有下一条)指示已使用Magento_Staging模块计划了内容暂存更新,这将为相应表中的实体创建附加记录。
仅当记录的created_in或updated_in列具有相同的值时,才会出现问题。
解决方法
这是预期行为,仅当行之间存在差异时,才会导致出现问题。
相关阅读
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f