搜索表单,将“ belongs_many_many”与“ has_one”关联起来

时间:2018-11-17 21:07:50

标签: php silverstripe

我有这样的关系:

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相关的错误范围不同

如何搜索这种关系?表单将变得更加复杂,我已经尝试研究覆盖表单,但不确定如何做。

1 个答案:

答案 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的类中