我创建了一个名为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'类,因为你引用的是你正在使用的类。因此,与类"服务"本身相关会更有意义.
你的代码不起作用的原因是因为你的关系搞混了。
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;
}
}