具有多态关系的SIlverStripe ORM上的EAV实现

具有多态关系的SIlverStripe ORM上的EAV实现,orm,silverstripe,entity-attribute-value,Orm,Silverstripe,Entity Attribute Value,我需要实现EAV,我被多态关系所束缚 例如,模型包括: 产品页 属性 属性十进制 阿特瓦尔布尔 AttrValOtherType 如何正确创建属性价值与产品价值的关系 每个属性都可以是几种类型中的一种:十进制、布尔、varchar列表中的项、varchar列表中的少数项等等。 因此,与价值的关系必须是多态的 我已经阅读了这部分文档 但是仍然无法理清如何实现EAV。我想用另一种方式:从值对象到属性之间有一个has\u one关系。然后将类型枚举添加到属性 从技术上讲,您的值表将允许每个属性有

我需要实现EAV,我被多态关系所束缚

例如,模型包括:

  • 产品页
  • 属性
  • 属性十进制
  • 阿特瓦尔布尔
  • AttrValOtherType
如何正确创建属性价值与产品价值的关系

每个属性都可以是几种类型中的一种:十进制、布尔、varchar列表中的项、varchar列表中的少数项等等。
因此,与价值的关系必须是多态的

我已经阅读了这部分文档

但是仍然无法理清如何实现EAV。

我想用另一种方式:从值对象到属性之间有一个has\u one关系。然后将类型枚举添加到属性

从技术上讲,您的值表将允许每个属性有多个值,但这可能是您需要的功能

回想起来,另一种可能更好的方法是将BooleanAttribute作为Attribute的子类,并让SilverStripe的多表继承为您服务

您必须手动为value编写getter,并确定要连接到哪个表,但polymorphic has不会有任何神奇的解决方案——它非常简单


从更大的角度来看,我也会质疑EAV是否真的是您所需要的——它将创建一些非常大的查询,而不是非常适合搜索。如果搜索不重要,而且只需要灵活的属性,那么JSON负载可能会更好?

虽然Silverstripe是运行EAV模型样板文件的良好平台,但它并没有太多现成的帮助。我很希望看到这一可能性,但我认为这需要相当数量的核心ORM被替换/重载,以使其能够存储属性,因为JSON违反了1NF规则。如果您愿意忽略这一点,我同意将属性数据存储在JSON中。您可能喜欢考虑利用SimulStRepe的配置API和缓存,并优化任何DB查询,或者使用JSON数据类型(最小MySQL 5.7 NYNDB,PostgreSQL 9.4等),或浅表JSON处理,如模块。@山姆,谢谢您的建议。我将尝试您的技术“每个属性有多个值”。我真的需要EAV。请你看看这个问题好吗?它与当前的严格相关。