Orm Silverstripe假设SiteTree与父级的关系为?
我的(部分)数据对象:Orm Silverstripe假设SiteTree与父级的关系为?,orm,silverstripe,Orm,Silverstripe,我的(部分)数据对象: class InternalExternalLink extends DataObject { private static $db = array( 'ExternalLink' => 'VarChar(256)', 'LinkLabel' => 'VarChar(256)', "LinkType" => "Enum(array('Internal', 'External','Attachmen
class InternalExternalLink extends DataObject {
private static $db = array(
'ExternalLink' => 'VarChar(256)',
'LinkLabel' => 'VarChar(256)',
"LinkType" => "Enum(array('Internal', 'External','Attachment'))"
);
private static $has_one = array(
'InternalLink' => 'SiteTree',
'Attachment' => 'File'
);
function getCMSFields() {
$fields = new FieldList(array(
$internal = DropdownField::create("InternalLinkID", "Choose a page", SiteTree::get()->map()->toArray())->setEmptyString("-- choose --"),
));
return $fields;
}
添加我将此添加到页面:
class Page extends SiteTree {
private static $has_many = array(
'Links' => 'InternalExternalLink'
);
function getCMSFields() {
$fields = parent::getCMSFields();
$gridField = new GridField('Links', 'Links', $this->Links(), GridFieldConfig_RecordEditor::create());
$fields->addFieldsToTab('Root.Main', $gridField);
return $fields;
}
问题是,当通过gridfield添加链接时,它会自动假定Link.InternalLink是父页面,而不是任何页面,并隐藏“页面选择”下拉列表。例如,如果我正在编辑about us页面,那么我通过gridfield添加的每个链接数据对象都会自动将其内部链接设置为about us页面
如何更改此假设以允许我通过下拉菜单选择任何页面?尝试以下操作:
1) 为数据对象指定一个“父”关系:
class InternalExternalLink extends DataObject {
private static $has_one = array(
'Parent' => 'DataObject',
'InternalLink' => 'SiteTree',
'Attachment' => 'File'
);
...
}
2) 在页面的列表中指定“父项”:
class LinkTestPage extends SiteTree {
private static $has_many = array(
'Links' => 'InternalExternalLink.Parent'
);
...
}
这里的问题是,
InternalExternalLink
上的关系是到SiteTree
的,而您正试图在页面
上重新定义到它的关系。由于没有从InternalExternalLink
到Page
的has\u one
,并且您使用的是稍旧的3.1版本,因此会查找父项的默认has\u one
要解决此问题,您可以将InternalLink
关系更改为指向Page
而不是SiteTree
,或者使用DataExtension
将has-many
关系添加到SiteTreeHi Simon,所以问题是我在InternalExternalLink上没有指向页面的$has_one关系?这就是为什么它使用$has_one“InternalLink”关系来代替?因此,我需要两种关系-父关系和与另一个SiteTree对象的关系。您还可以概述在最近的3.1版本中您所提到的行为发生了哪些变化吗?另外-什么是“默认的已查找父项之一”行为,是否在任何地方进行了记录?谢谢