Раскрывающийся фильтр CMS Silverstripe имеет_ один параметр перед значением dropdown_field_threshold - PullRequest
1 голос
/ 06 марта 2019

У меня есть has_one в одной из моих моделей.Но это превышает dropdown_field_threshold.Но в методе getCMSFields я изменил запрос для этого выпадающего списка.Но поскольку он уже превышает пороговое значение до вызова этого метода, раскрывающийся список преобразуется в NumericDropdown или что-то в этом роде.

Есть ли способ изменить запрос до того, как порог будет проверен?

Кстати, я знаю, что могу сделать собственный выпадающий список с моим собственным запросом.Но Silverstripe уже обрабатывает много, поэтому было бы лучше просто изменить запрос.


Редактировать: Пример кода

public function getCMSFields() {
    $fields = parent::getCMSFields();
    $questionnaire = $this->QuestionnaireSection()->Questionnaire();
    $nextQuestionOptions = $questionnaire->Sections();

    /** @var DropdownField $dropdownField */
    $dropdownField = $fields->dataFieldByName("NextQuestionID");
    $dropdownField->setSource($nextQuestionOptions->map()->toArray());

    return $fields;
}

1 Ответ

1 голос
/ 18 марта 2019

К сожалению, невозможно изменить этот запрос в контексте класса.Альтернативой может быть написание собственной функции скаффолда вместо вызова parent :: getCMSFields, но в этом случае это не рекомендуется.

Если у вас есть какой-то способ получить текущий объект Анкеты глобально, вы можете добавитьфункция augmentDataQueryCreation, как показано ниже, для QuestionnaireSection, чтобы добавить предложение where в выполняемый запрос.Имейте в виду, однако, что эта функция вызывается в каждом случае, когда выполняется QuestionnaireSection :: get ().

public function augmentDataQueryCreation(SQLSelect $query, DataQuery $dataQuery){
    $baseTable = $this->baseTable();
    $filter = 1; //Your global param here
    $dataQuery->where("\"$baseTable\".\"QuestionnaireID\" = $filter");
}

Альтернативой для предотвращения замены DropdownField на NumericField является изменение порога этого переключателя.добавив следующий код в ваш mysite.yml.Это не решит вашу проблему полностью, но это хороший обходной путь.

SilverStripe\ORM\FieldType\DBForeignKey:
    dropdown_field_threshold: 100000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...