我需要实现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有效负载也许会更好?