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

时间:2017-06-24 22:01:10

标签: orm silverstripe entity-attribute-value

我需要实现EAV,而且我已经接受了多态关系。

例如模型是:

  • ProductPage。
  • 属性。
  • AttrValDecimal。
  • AttrValBool。
  • AttrValOtherType

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

每个属性都可以是以下几种类型之一:decimal,boolean,varchar list中的item,varchar list中的几项等等...
因此,与价值的关系必须是多态的。

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

1 个答案:

答案 0 :(得分:1)

我反过来说:从值对象返回属性的has_one关系。然后将Type枚举添加到Attribute。

您的值表在技术上会允许每个属性有多个值,但这可能是您需要的功能吗?

另一方面,回想起来可能更好,处理这个木头的方法是使BooleanAttribute成为Attribute的子类,让SilverStripe的多表继承让Bebe为你工作。

你必须手动编写你的getters值,并找出要加入的表,但是多态有一个不会有任何魔法修复 - 它非常简单

更大的图片我还挑战EAV是否真的是你需要的 - 它会创造一些非常大的查询而不是非常适合搜索。如果搜索并不重要,并且所有需求都是灵活的属性,那么JSON有效载荷可能会更好吗?