【问题标题】:Silverstripe 4 - Add many_many relationship by defaultSilverstripe 4 - 默认添加 many_many 关系
【发布时间】:2022-07-05 20:37:45
【问题描述】:

是否可以默认添加many_many关系?

我正在使用每个站点都有一个博客的子站点模块,但我们希望能够标记博客帖子,以便它们可以出现在任何其他子站点上:

  • 子网站 1
  • 子站点 2
  • 子网站 3

我将此设置作为 BlogPost 的扩展:

private static $many_many = [
        'Subsites' => Subsite::class       
    ];

$fields->addFieldToTab('Root.PostOptions', 
            TagField::create('Subsites','Show on other sites',Subsite::get(),$this->owner->Subsites())
                ->setShouldLazyLoad(false) 
                ->setCanCreate(false) 
            ); 

如何在创建 BlogPost 时将当前子站点添加为默认关系,以便 Subsite2 下的每个 BlogPost 默认都有一个“Subsite2”标签,即使用

Subsite::get_by_id(SubsiteState::singleton()->getSubsiteId())

如果这没有意义,我会尝试解释更多:)

【问题讨论】:

    标签: silverstripe-4


    【解决方案1】:

    您可以尝试在您的 BlogPost 的 onBeforeWrite 函数中添加关系,只需调用 $this->Subsites()->add($subsiteObject) 即可。为确保对象确实被创建并且不仅被更新,您可以检查对象 ID。如果还没有,则该对象是新创建的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多