К сожалению, невозможно изменить этот запрос в контексте класса.Альтернативой может быть написание собственной функции скаффолда вместо вызова 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