Форма поиска с отношением `own_many_many` к` has_one` - PullRequest
0 голосов
/ 18 ноября 2018

У меня такие отношения:

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 голосов
/ 28 ноября 2018

Хотя может быть способ заставить это работать автоматически, мне пришлось реализовать пользовательский 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

...