Silverstripe 3 - 取消许多关系

问题描述 投票:1回答:2

有没有办法使用代码取消SilverStripe 3中many_many关系的链接?

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

我怎样才能做到这一点?

php many-to-many relationship silverstripe
2个回答
1
投票

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作业运行它。

注意我没有测试上面的代码,它需要一些调整...


1
投票

许多SilverStripe 3中的许多关系都是无版本的,除非你有很多关系,否则在页面取消发布时维护关系链接不会对性能产生影响。

或者,您可以使用onBeforeUnpublish挂钩删除取消发布期间的关系。

© www.soinside.com 2019 - 2024. All rights reserved.