在我们的SilverStripe项目中NavBlock
has_many
SiteModes
:
class NavBlock extends DataObject
{
private static $has_many = array(
'SiteModes' => 'SiteMode'
);
}
如何将NavBlock
的默认设置与所有可用的has_many
建立SiteModes
关系?
我希望在创建新NavBlock
并将其应用于所有现有NavBlocks
时显示此关系。
实现这一目标的最佳方法是什么?
答案 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);
}
}
}
}