搜索具有“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