Silverstripe 3 - Unlink много много отношений - PullRequest
1 голос
/ 18 апреля 2019

Есть ли способ отсоединить отношения many_many в SilverStripe 3 с помощью кода?

После определенной даты я хочу отменить публикацию страницы и снять связь со всеми ее многочисленными связями.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

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 голос
/ 18 апреля 2019

Многие Многие отношения в SilverStripe 3 являются неверсированными, если только у вас не будет очень большого количества многих многих отношений, не будет никакого влияния на производительность от поддержания ссылок отношений, когда страница не опубликована.

В качестве альтернативы, вы можете удалить отношения во время отмены публикации, используя хук onBeforeUnpublish .

...