SilverStripe 4中many_many关系的CMS字段

时间:2018-11-23 18:19:19

标签: silverstripe-4

我在 BlogArticle BlogCategory 之间有很多关系。我想将 CheckboxSetField ListBoxField 添加到BlogArticle的cmsFields中,该博客包含BlogCategories。

以下代码以cms为单位显示了正确的复选框,但由于某种原因,它不存储值:

class BlogCategory extends DataObject
{
    private static $db = [
        'Title' => 'Varchar(255)'
    ];

    private static $belongs_many_many = [
        'BlogArticles' => BlogArticle::class
    ];
}


class BlogArticle extends Page
{
    private static $many_many = [
        "BlogCategories" => BlogCategory::class,
    ];

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();

        $field = CheckboxSetField::create(
            'BlogCategories',
            'Categories',
            BlogCategory::get()
        );

        $fields->add($field);
        return $fields;
    }
}

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

在BlogArticle.php上,您没有引用该关系,因此无法保存。

因此BlogCategory::get()应该是$this->BlogCategories()-您可能还必须map()的值。

在此处有一个使用$many_many复选框字段的示例:https://www.silverstripe.org/learn/lessons/v4/working-with-data-relationships-many-many-1