簡體   English   中英

使用ListBoxField保存為many_many關系

[英]Saving to a many_many relationship with a ListBoxField

我創建了一個名為Service的DataObject並與RelatedServices建立了many_many關系,如下所示:

class Service extends DataObject {
    private static $db = array (
        'Name' => 'Varchar',
        'Description' => 'Varchar',
    );

    private static $many_many = array (
        'RelatedServices' => 'RelatedService'
    );

    public function getCMSFields() {
        $fields = FieldList::create(TabSet::create('Root'));
        $services = $this->get()->where("\"Service\".\"Name\" != '$this->Name'")->map('ID', 'Name')->toArray();
        $fields->addFieldsToTab('Root.Main', array(
            TextField::create('Name'),
            TextField::create('Description'),
            ListBoxField::create('RelatedServices', 'Related services')->setMultiple(true)->setSource($services)
        ));
        return $fields;
    }
}

和:

class RelatedService extends DataObject {
    private static $db = array (
        'Name' => 'Varchar',
    );

    private static $belongs_many_many = array (
        'RelatedServices' => 'RelatedService'
    );
}

這已在ModelAdmin中使用,並且該服務可以正常運行,包括相關的服務文本區域,但是不會保存。 我以前做過它,它在CMS中的一個單獨的選項卡中,並且具有RelatedService和”管理部分,通過數據庫查看它看起來像是可行的,但是我認為這是不必要的部分,因此嘗試將其全部集成在一起,現在不再保存到數據庫。

當您引用正在使用的類時,不需要'RelatedService'類。因此,與類'Service'本身相關將更有意義。
您的代碼無法正常工作的原因是因為您的關系混亂了。

class Service extends DataObject{
    private static $db = array (
        'Name' => 'Varchar',
        'Description' => 'Varchar',
    );

    private static $many_many = array (
        'RelatedServices' => 'Service'
    );

    private static $belongs_many_many = array (
        'ParentServices' => 'Service'
    );

    public function getCMSFields() {
        $fields = FieldList::create(TabSet::create('Root'));
        $services = $this->get()->where("\"Service\".\"Name\" != '$this->Name'")->map('ID', 'Name')->toArray();
        $fields->addFieldsToTab('Root.Main', array(
            TextField::create('Name'),
            TextField::create('Description'),
            ListBoxField::create('RelatedServices', 'Related services')->setMultiple(true)->setSource($services)
        ));
        return $fields;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM