在我们的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);
}
}
}
}