我有这样的关系:
class Registration extends DataObject {
private static $belongs_many_many = array(
"Workshops" => "Workshop"
);
}
class Workshop extends DataObject {
private static $has_one = array(
"Course" => "Course"
);
}
class Course extends DataObject {
private static $db = array(
"Title" => "Title"
);
}
我正在为ModelAdmin
使用Registration
,并且我想为特定课程自定义注册的搜索表单,即课程名称的下拉列表(少于100个)。
例如,我尝试了许多不同的配置:
private static $searchable_fields = array(
"Workshops.Course.Title"
);
或
private static $searchable_fields = array(
"Workshops.CourseTitle"
);
但是与scaffoldSearchField
相关的错误范围不同
如何搜索这种关系?表单将变得更加复杂,我已经尝试研究覆盖表单,但不确定如何做。
答案 0 :(得分:0)
虽然可能有一种方法可以自动执行此操作,但我必须像这样实现自定义getSearchContext
:
public function getSearchContext() {
$context = parent::getSearchContext();
$context->getFields()->push($dropdown = new DropdownField('WorkshopID', "Workshop", $workshops));
$dropdown->setEmptyString('-- Select Course --');
return $context;
}
然后应用自定义过滤器:
public function getList() {
$list = parent::getList();
$params = $this->getRequest()->requestVars();
$list = $list->filter(array("Workshop.CourseID" => $params['WorkshopID']));
return $list;
}
这两个都是在您的扩展ModelAdmin的类中