OCTOBERCMS 下拉选项取决于其他下拉菜单中的选定值

OCTOBERCMS Dropdown options dependent on selected value on other dropdown

我被这个问题困住了,在搜索示例一段时间后我无法弄清楚如何解决。

两个下拉选项 table 取决于它们的值。

我有一个 table 具有 '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

我在 fields.yaml 中还有另一个 table 'modulos' 具有以下结构的值:

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

在 'Area' 模型中我有:

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

在'Modulos'模型中我有

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

我有其他模型与以前的字段有关系,两个下拉字段在没有任何过滤器的情况下工作正常,故障排除字段(模数)我找不到根据 [=43 的值进行过滤的方法=] 下拉菜单 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');
}

这对我来说似乎合乎逻辑(也许不合乎逻辑),我也尝试过使用 DB 以及更多其他方法。我尝试使用 dd() 来查看是否可以从第一个下拉列表中获取值但无济于事。如果我尝试过滤值,则根本不会出现任何值(空值除外)。

有什么帮助吗???

TIA

JL

数据集作为第二个参数传递给"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');
}

我通过以下步骤解决了该下拉菜单和其他具有相同 objective 的问题:

  • 我有 'Relation' 小部件。将它们更改为 'Dropdown' 小部件。
  • 定义了 'Depends on' 字段。
  • 将 'Preset' 字段定义为上述字段。我认为这是缺少 link 的问题解决方案,在任何地方都没有记录,我在 try/error 的基础上到达那里(可能将其添加到 10 月的文档中很有价值)。
  • 使用问题末尾的代码片段或 Samuel 回答的第二个片段代码过滤选项。

这解决了我的问题。

谢谢大家