Silverstripe 3:断开许多关系
Silverstripe 3: Unlink many many relationships
有没有办法使用代码解除 SilverStripe 3 中的 many_many 关系?
在某个日期之后,我想取消发布一个页面并取消链接它的所有许多关系。
我该怎么做?
SilverStripe 3 中的许多关系是未版本化的,除非您有非常多的关系,否则在页面未发布时维护关系链接不会对性能产生影响。
或者,您可以在取消发布期间使用 onBeforeUnpublish 挂钩删除关系。
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 中的 many_many 关系?
在某个日期之后,我想取消发布一个页面并取消链接它的所有许多关系。
我该怎么做?
SilverStripe 3 中的许多关系是未版本化的,除非您有非常多的关系,否则在页面未发布时维护关系链接不会对性能产生影响。
或者,您可以在取消发布期间使用 onBeforeUnpublish 挂钩删除关系。
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 作业。
注意我还没有测试上面的代码,它需要一些调整...