通过getCMSFields()添加字段时保存DataObject关系?

时间:2014-08-08 02:19:18

标签: orm silverstripe

使用此代码,在发布CMS页面时,DataObject ID(InternalExternalLinkID)不会保存到页面中,如何从数据对象中自动添加脚手架并保存关系(无需手动执行onAfterWrite(),如下所述http://www.silverstripe.org/data-model-questions/show/11044):

class Page extends SiteTree {

    private static $has_one = array(
        'InternalExternalLink' => 'InternalExternalLink'
    );

    function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->addFieldsToTab('Root.Main', singleton('InternalExternalLink')->getCMSFields());

我知道您可能需要首先创建数据对象,获取ID然后保存到Page对象 - CMS是否可以像ModelAdmin一样自动创建(或更新)并自动保存此相关数据对象?

1 个答案:

答案 0 :(得分:0)

您应该使用GridField来处理对嵌套对象的保存。签出has_one关系编辑器的关系处理程序模块。如果您不想安装其他依赖项,也可以在没有该模块的情况下使其工作。只需创建一个新的GridField实例,并将您的has_one记录作为DataList查询传递。

http://addons.silverstripe.org/add-ons/simonwelsh/gridfieldrelationhandler