Php Silverstripe 3:取消多个关系的链接
是否有一种方法可以使用代码取消SilverStripe 3中多个关系的链接 在某个日期之后,我想取消发布一个页面并取消其所有关系的链接Php Silverstripe 3:取消多个关系的链接,php,many-to-many,relationship,silverstripe,Php,Many To Many,Relationship,Silverstripe,是否有一种方法可以使用代码取消SilverStripe 3中多个关系的链接 在某个日期之后,我想取消发布一个页面并取消其所有关系的链接 如何做到这一点?SilverStripe 3中的许多关系都是未版本的,除非您有大量的关系,否则在页面未发布时维护关系链接不会对性能产生影响 或者,您可以在取消发布期间使用钩子删除关系。取消链接主要调用$page->relationship()->remove($object) 如果要删除关系,可以使用onbeforeumpublish()hook,例如: cla
如何做到这一点?SilverStripe 3中的许多关系都是未版本的,除非您有大量的关系,否则在页面未发布时维护关系链接不会对性能产生影响
或者,您可以在取消发布期间使用钩子删除关系。取消链接主要调用
$page->relationship()->remove($object)代码>
如果要删除关系,可以使用onbeforeumpublish()
hook,例如:
class Page extends SiteTree
{
public function onBeforeUnpublish()
{
foreach ($this->Relation() as $object) {
$this->Relation()->remove($object);
}
}
}
如果您想自动执行此操作,您可能需要向PageController::init()
中添加一些内容,以循环遍历所有需要取消发布的页面,然后取消发布它们(我想使用Page::doUnpublish()
)
或者,您可以编写一个BuildTask
,然后通过cron作业运行它
注意我没有测试上面的代码,它需要一些调整…需要一个属于多个关系才能工作吗?我通常发现属于多个
不是必需的(尽管你真的应该有一个反向的多个
)。ManyManyList
负责在数据库中生成联接表,因此它不应该是:-)