与多态关系的SilverStripe ORM实施EAV



我需要实现EAV,并且我对多态关系挂钩。

例如,模型为:

  • productpage。
  • 属性。
  • attrvaldecimal。
  • attrvalbool。
  • attrvalothertype

如何正确创建关系属性 - 值和产品值?

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

我已经阅读了文档的这一部分https://docs.silverstripe.org/en/3/developer_guides/model/relations/#polymorphic-has-one
但仍然无法整理如何实现EAV。

我会以其他方式进行:具有从值对象回到属性的has_one关系。然后在属性中添加类型的枚举。

您的价值表在技术上将允许每个属性允许多个值,但这也许是您需要的功能?

回想起来,另一个可以更好地处理这种木材的方法是使booleanatibute成为属性的子类,让SilverStripe的多桌继承确实适合您。

您必须手动编写getters,并弄清楚要加入哪个表,但是多态有一个魔术,这很简单。

更大的图片我还会挑战EAV是否真的是您需要的 - 它将创建一些非常大的查询,而不是很好地搜索。如果搜索无关紧要,并且所有需求都是灵活的属性,那么JSON有效负载也许会更好?

最新更新