OCTOBERCMS Параметры раскрывающегося списка зависят от выбранного значения в другом раскрывающемся списке.

Я застрял с этой проблемой, и я не могу понять, как решить после некоторого времени поиска примера.

Два варианта раскрывающихся списков зависят от их значений.

У меня есть одна таблица со значениями ‘area’ (вложенная в простое дерево, работающее нормально) со следующей структурой в файле fields.yaml:

fields:
id:
label: Número
oc.commentPosition: ''
span: auto
disabled: 1
type: number

area_id:
label: 'Parente de'
oc.commentPosition: ''
emptyOption: 'Sem valor'
span: auto
type: dropdown

area:
label: Área
oc.commentPosition: ''
span: full
required: 1
type: text

У меня также есть другая таблица ‘modulos’ значения со следующей структурой в fields.yaml:

fields:
modulo:
label: Módulo
oc.commentPosition: ''
span: auto
required: 1
type: text

area:
label: Área
oc.commentPosition: ''
nameFrom: area
emptyOption: 'Sem valor'
span: auto
descriptionFrom: id
type: relation

В модели «Площадь» у меня есть:

 ...
public $hasMany = [
'modulos' => ['JML\Gkb\Models\Modulos']
];

В модели «Modulos» у меня есть

....
public $belongsTo = [
'area' => ['\JML\Gkb\Models\Area']
];

У меня есть другая модель, которая имеет отношения с предыдущими полями и два раскрывающихся поля работают нормально без какого-либо фильтра, и поле устранения неполадок (по модулю), где я не могу найти способ фильтрации на основе значений раскрывающегося списка «Площадь», у меня есть следующее в fields.yaml.

....
modulo_id:
label: mod
oc.commentPosition: ''
emptyOption: 'Sem valor'
span: auto
required: 1
dependsOn:

area
type: dropdown
tab: Geral

В моем PHP-файле моделей, в котором определены выпадающие списки, я имею:

public function getModuloIdOptions() {
return Modulos::where('area_id', '=', $this->area)->lists('modulo', 'id');
}

Это мне кажется логичным (возможно, нет), и я попытался с БД также и многие другие. Я пробовал с dd() чтобы увидеть, смогу ли я получить значения из первого выпадающего меню безрезультатно. Если я пытаюсь отфильтровать значения, никакое значение не появляется вообще (кроме пустого значения).

Любая помощь там ???

ТИА

JL

3

Решение

Набор данных передается как второй аргумент для получения метода «getOptions». Вот альтернативный подход, который может работать:

public function getModuloIdOptions($value, $data) {
return Modulos::where('area_id', '=', array_get($data, 'area'))->lists('modulo', 'id');
}

Вы также можете попробовать получить доступ к area_id значение:

public function getModuloIdOptions(){
return Modulos::where('area_id', '=', $this->area_id)->lists('modulo', 'id');
}

Или менее эффективно area->id значение (может потребоваться обработка исключений):

public function getModuloIdOptions(){
return Modulos::where('area_id', '=', $this->area->id)->lists('modulo', 'id');
}
5

Другие решения

Я решил проблему с этим выпадающим и другими задачами с помощью следующих шагов:

  • У меня есть виджет «Отношения» на них. Поменял их на виджет Dropdown.
  • Определяется поле «Зависит от».
  • Определено поле «Preset» для поля выше. Я думаю, что это отсутствующая ссылка на решение проблемы, нигде не документированная, и я получаю ее на основе принципа «попытка / ошибка» (возможно, было бы полезно добавить это в октябрьскую документацию).
  • Параметры фильтра с кодом фрагмента в конце моего вопроса или вторым фрагментом ответа Самуила.

Это решило мою проблему.

Спасибо всем.

1

По вопросам рекламы [email protected]