有没有办法使用代码取消SilverStripe 3中many_many关系的链接?
在某个特定日期之后,我想取消发布一个页面并取消所有关系的链接。
我怎样才能做到这一点?
Unlink基本上叫$page->Relation()->remove($object);
如果你想删除关系,你可以使用onBeforeUnpublish()
钩子,如:
class Page extends SiteTree
{
public function onBeforeUnpublish()
{
foreach ($this->Relation() as $object) {
$this->Relation()->remove($object);
}
}
}
如果您想自动执行此操作,您可能需要在PageController::init()
中添加一些内容,这些内容遍历需要取消发布的所有页面,然后取消发布(我认为使用Page::doUnpublish()
)。
或者,您可以编写一个BuildTask
然后通过cron作业运行它。
注意我没有测试上面的代码,它需要一些调整...
许多SilverStripe 3中的许多关系都是无版本的,除非你有很多关系,否则在页面取消发布时维护关系链接不会对性能产生影响。
或者,您可以使用onBeforeUnpublish挂钩删除取消发布期间的关系。