如何设置所有可能的关系的has_many默认在SilverStripe


How to set all possible relationships of has_many as default in SilverStripe

在我们的SilverStripe项目NavBlock has_many SiteModes:

class NavBlock extends DataObject
{
    private static $has_many = array(
        'SiteModes' => 'SiteMode'
    );
}

如何将NavBlock的默认值设置为与所有可用的SiteModes具有has_many关系?

我希望在创建新的NavBlock并应用于所有现有的NavBlocks时出现这种关系。

实现这一目标的最佳方法是什么?

这样做的一种方法是在onAfterWrite函数类中添加每个SiteMode:

class NavBlock extends DataObject {
    private static $has_many = array(
        'SiteModes' => 'SiteMode'
    );
    protected function onAfterWrite() {
        parent::onAfterWrite();
        if ($this->SiteModes()->count() === 0) {
            $siteModes = SiteMode::get();
            foreach ($siteModes as $siteMode) {
                $this->SiteModes()->add($siteMode);
            }
        }
    }
}