为什么可配置产品和简单产品之间的关系存储两次?

2022-08-30 15:19:30

在这里深入研究Magento内部,不是寻找具体问题的解决方案,只是试图了解一些实现细节。

当您在Magento中创建可配置产品,然后创建子简单产品以实现衬衫尺寸,颜色等内容时,Magento将此关系存储在个单独的表中。

catalog_product_relation
catalog_product_superlink_table

为什么这些关系存储两次?

这是遗留代码,还是产品关系链接和产品“超级链接”链接之间存在语义上的区别?

系统是期望这些是相同的,还是让这些表表示不同的父/子关系是有效的对象状态?


答案 1

为什么是一个好问题。该表仅包含与可配置产品相关的数据。 除了可配置的关系外,还包含捆绑和分组产品的关系信息。catalog_product_super_linkcatalog_product_relation

围绕可配置产品的所有业务逻辑都指向表,例如,查找可配置产品的可配置属性和价格更新。catalog_product_super_*

相反,该表由不特定于可配置产品的类(如抽象目录产品索引器类)使用。catalog_product_relation

似乎Magento核心团队希望将逻辑上不同的功能不仅分离到单独的PHP类中,而且还要分离到单独的数据库表中。可能的优势?我想从理论上讲,这种方式在不中断索引器实现的情况下更改可配置产品实现更容易。

这只是一个猜测 - 我还没有证实这一点,也没有与“知道”的人交谈过(心理笔记想象)


答案 2

推荐