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

时间:2016-10-24 22:21:15

标签: php silverstripe

在我们的SilverStripe项目中NavBlock has_many SiteModes

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

如何将NavBlock的默认设置与所有可用的has_many建立SiteModes关系?

我希望在创建新NavBlock并将其应用于所有现有NavBlocks时显示此关系。

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

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是在类SiteMode函数中添加每个onAfterWrite

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);
            }
        }
    }
}