Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Silverstripe 3:取消多个关系的链接_Php_Many To Many_Relationship_Silverstripe - Fatal编程技术网

Php 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中多个关系的链接

在某个日期之后,我想取消发布一个页面并取消其所有关系的链接


如何做到这一点?

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
负责在数据库中生成联接表,因此它不应该是:-)