【发布时间】:2015-11-08 14:03:13
【问题描述】:
在 SilverStripe 3.1.13 中,我试图在 ModelAdmin 管理的 DataObjects 之间建立简单的一对多关系。有一个Facility 类可以有一个FacilityCategory。
我可以进入设施类别选项卡,但是一旦我进入 设施 选项卡,“主”屏幕就会变成空白,并且从那时起管理员就会受到污染 - 没有选项卡会再显示内容.
我删除了所有以 Facility 和 FacilityCategories 开头的表,并使用flush反复进行了开发/构建。
有人能解释一下为什么它不起作用吗?我的班级/关系有什么问题?
Facility.php
class Facility extends DataObject {
private static $db = array(
'Title' => 'Varchar',
);
private static $has_one = array(
'Category' => 'FacilityCategory'
);
public static $summary_fields = array(
'Title', 'Category'
);
public function getCMSFields(){
$fields = FieldList::create(
TextField::create('Title'),
DropdownField::create('FacilityCategoryID', 'Category')
->setSource(FacilityCategory::get()->map('ID', 'Title'))
->setEmptyString('-- select a category --')
);
return $fields;
}
}
class FacilityAdmin extends ModelAdmin {
private static $menu_title = 'Facilities';
private static $url_segment = 'facilities';
private static $managed_models = array(
'Facility'
);
}
FacilityCategory.php
class FacilityCategory extends DataObject {
private static $db = array(
'Title' => 'Varchar'
);
private static $has_many = array(
'Facilities' => 'Facility'
);
public function getCMSFields(){
$fields = FieldList::create(
TextField::create('Title')
);
return $fields;
}
}
class FacilityCategoryAdmin extends ModelAdmin {
private static $menu_title = 'Facility Categories';
private static $url_segment = 'facility-categories';
private static $managed_models = array(
'FacilityCategory'
);
}
【问题讨论】:
-
可能是在您的
$summary_fields(应该是私有的)中,您列出了相关的类别对象而不是类别对象上的特定字段,private static $summary_fields = array('Title', 'Category.Title');也是如此。另外,您使用 2 个单独的 modelAdmins 的任何特殊原因?我倾向于使用相同的 ModelAdmin 来管理两个模型(因为它们是相关的)。 -
@jpmcc 牛眼!就是这样。非常好的一课。请复制您的评论作为答案,您会被接受。
-
根据两个单独的 ModelAdmins - 这是我将管理内容与相应的 DataObject 类一起保存在同一个文件中的第一个直观选择,但是如果我告诉我这种方法会影响表现,我一定会走你的路。
-
抱歉,我不是想挑剔什么的。不确定性能。
标签: php silverstripe data-objects modeladmin