搜索具有“belongs_many_many”到“has_one”关系的表单
Search form with a `belongs_many_many` to `has_one` relationship
我有这样的关系:
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"
);
}
我正在为 Registration
使用 ModelAdmin
,我想为特定课程的注册自定义搜索表单,即课程的下拉列表(只要少于 100 个)标题.
我尝试了很多不同的配置,例如:
private static $searchable_fields = array(
"Workshops.Course.Title"
);
或
private static $searchable_fields = array(
"Workshops.CourseTitle"
);
但是我得到了与 scaffoldSearchField
相关的不同范围的错误
如何搜索关系?表单会变得更加复杂,我已经尝试过覆盖表单但不确定如何去做。
虽然可能有办法让它自动工作,但我必须像这样实现自定义 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;
}
这两个都在您的 class 扩展 ModelAdmin
中
我有这样的关系:
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"
);
}
我正在为 Registration
使用 ModelAdmin
,我想为特定课程的注册自定义搜索表单,即课程的下拉列表(只要少于 100 个)标题.
我尝试了很多不同的配置,例如:
private static $searchable_fields = array(
"Workshops.Course.Title"
);
或
private static $searchable_fields = array(
"Workshops.CourseTitle"
);
但是我得到了与 scaffoldSearchField
如何搜索关系?表单会变得更加复杂,我已经尝试过覆盖表单但不确定如何去做。
虽然可能有办法让它自动工作,但我必须像这样实现自定义 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;
}
这两个都在您的 class 扩展 ModelAdmin
中