【问题标题】:Overload Enum in SilverStripe DataExtensionSilverStripe DataExtension 中的重载枚举
【发布时间】:2016-05-20 17:38:41
【问题描述】:

是否可以使用 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
}

【问题讨论】:

  • 假设您在配置中将OrderExtension 应用于Order,并且最后缺少的) 只是示例中的错字?
  • 你试过用这个来运行 dev/build 吗?发生了什么? SS 将在 dev/build 上抱怨您正在尝试添加同名的列,否则它将修改该字段的列配置。不要忘记更新 _config/config.yml_config/extensions.yml 为您的新装饰器提供参考,否则 SS 的类清单将不知道您的类。
  • RobbieAverill - 是的,在我的示例中只是拼写错误。 @theruss - 我确定我在 config.yml 中有我的扩展并进行了开发/构建,但它没有做任何事情。 SS也没有投诉。我今天要再次测试一下。谢谢你们。
  • 双重检查,扩展确实在工作,但状态没有更新。

标签: php enums silverstripe


【解决方案1】:

我不知道如何让 augmentDatabase() 方法工作,但在与一位同事交谈后,他建议使用 config.yml,这成功了。

Order:
    db:
        Status: Enum('Unpaid, Paid, Cancelled','Unpaid')

【讨论】:

    【解决方案2】:

    使用我们目前讨论的方法,这似乎是不可能的。我实现了 OP 的代码并发现了同样的事情,即装饰对象的表(在本例中为“Order”)没有按预期更新。

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

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

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

    祝你好运:-)

    【讨论】:

    • 您提供的链接正在重定向到不同的页面。我想知道您是否可以找到原始链接/页面?我发现 https://docs.silverstripe.org/en/4.0/developer_guides/model/data_types_and_casting/#overloading 提到使用 get 或 set。同样,它并没有确切说明如何做到这一点。
    • 对不起,伙计,我再也找不到那个页面了。不确定你,但我从工作示例中工作得比逐步文档更好:-) 基本上; AFAIKT augmentDatabase() 将在开发/构建上使用该方法执行您对数据库所做的更改。所以看看Versioned 和你能做什么:-)
    • 我会检查的。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多