我需要实现EAV,而且我已经接受了多态关系。
例如模型是:
如何正确创建关系属性值和产品价值?
每个属性都可以是以下几种类型之一:decimal,boolean,varchar list中的item,varchar list中的几项等等...
因此,与价值的关系必须是多态的。
我已经阅读了这部分文档
https://docs.silverstripe.org/en/3/developer_guides/model/relations/#polymorphic-has-one
但仍然无法理清如何实施EAV。
答案 0 :(得分:1)
我反过来说:从值对象返回属性的has_one关系。然后将Type枚举添加到Attribute。
您的值表在技术上会允许每个属性有多个值,但这可能是您需要的功能吗?
另一方面,回想起来可能更好,处理这个木头的方法是使BooleanAttribute成为Attribute的子类,让SilverStripe的多表继承让Bebe为你工作。
你必须手动编写你的getters值,并找出要加入的表,但是多态有一个不会有任何魔法修复 - 它非常简单
更大的图片我还挑战EAV是否真的是你需要的 - 它会创造一些非常大的查询而不是非常适合搜索。如果搜索并不重要,并且所有需求都是灵活的属性,那么JSON有效载荷可能会更好吗?