是否可以使用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
}
答案 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表(SiteTree
,SiteTree_Live
,SiteTree_versions
),那么它的逻辑肯定会非常复杂。但我怀疑,对于DataObject上的自定义实现,事情可能会更简单一些。 (除非您对DataObjects进行版本控制!)。