在SilverStripe DataExtension中重载枚举

时间:2016-05-20 17:38:42

标签: php enums silverstripe

是否可以使用DataExtension重载Enum字段?

class Order extends DataObject {
    private static $db=array('Status'=>"Enum('Unpaid, Paid','Unpaid')";
}

class OrderExtension extends DataExtension {
    private static $db=array('Status'=>"Enum('Unpaid, Paid, Cancelled','Unpaid')"; //doesn't work
}

2 个答案:

答案 0 :(得分:5)

我无法弄清楚如何让augmentDatabase()方法起作用,但在与同事交谈之后,他建议使用config.yml,这就行了。

{{1}}

答案 1 :(得分:3)

使用我们目前讨论过的方法似乎无法做到这一点。我实现了OP的代码并发现了同样的事情,即装饰对象的表(" Order"在这种情况下)没有按预期更新。

我可以理解为什么这不是通过DataExtension来实现的,因为开发人员可能会依赖某些依赖于特定表格和列规范的核心逻辑。

我做了一点挖掘,发现OP想要的可能性,但有一些代码。查看以下页面:https://docs.silverstripe.org/en/3.3/reference/dataextension/#custom-database-generation它建议在自定义augmentDatabase()上定义DataExtension方法。

然而,似乎没有关于下一步该做什么的详细文档。相反,上面的页面建议检查核心Versioned扩展,在扩展我的整个SS项目之后,它是我能找到的唯一声明DataExtension方法的augmentDatabase()子类。鉴于Versioned需要处理它所装饰的每个类的x3表(SiteTreeSiteTree_LiveSiteTree_versions),那么它的逻辑肯定会非常复杂。但我怀疑,对于DataObject上的自定义实现,事情可能会更简单一些。 (除非您对DataObjects进行版本控制!)。

祝你好运: - )