Php OCTOBERCMS下拉选项取决于其他下拉列表上的选定值

Php OCTOBERCMS下拉选项取决于其他下拉列表上的选定值,php,dropdown,octobercms,octobercms-backend,Php,Dropdown,Octobercms,Octobercms Backend,我被这个问题困住了,在搜索了一段时间的示例后,我想不出如何解决这个问题 这两个下拉选项取决于它们的值 我在fields.yaml文件上有一个具有“area”值(嵌套在简单树工作ok中)的表,其结构如下: fields: id: label: Número oc.commentPosition: '' span: auto disabled: 1 type: number area_id: label: 'Parente de' o

我被这个问题困住了,在搜索了一段时间的示例后,我想不出如何解决这个问题

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

我在fields.yaml文件上有一个具有“area”值(嵌套在简单树工作ok中)的表,其结构如下:

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']
 ];
在“模”模型中,我有

....
 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');
}
对我来说,这似乎是合乎逻辑的(也许不是),我也尝试过DB和其他很多东西。我尝试使用
dd()
查看是否可以从第一个下拉列表中获取值,但没有结果。如果我尝试过滤这些值,则根本不会显示任何值(空值除外)

有人帮忙吗

短暂性脑缺血发作


JL

数据集作为第二个参数传递,以获取“getOptions”方法。以下是另一种可行的方法:

public function getModuloIdOptions($value, $data) {
    return Modulos::where('area_id', '=', array_get($data, 'area'))->lists('modulo', 'id');
}
您还可以尝试访问
区域id
值:

public function getModuloIdOptions(){
    return Modulos::where('area_id', '=', $this->area_id)->lists('modulo', 'id');
}
或效率较低的
区域->id
值(可能需要异常处理):


我通过以下步骤解决了该下拉列表和其他具有相同目标的问题:

  • 我在它们上面有“关系”小部件。将它们更改为“下拉”小部件
  • 定义了“依赖”字段
  • 将“预设”字段定义为上述字段。我认为这是缺少的问题解决方案的链接,在任何地方都没有记录,我是在尝试/错误的基础上找到的(将此添加到10月份的文档中可能很有价值)。
  • 在我的问题或答案的第二个snipet结尾使用snipet代码过滤选项
这解决了我的问题


谢谢大家。

Ty的编辑,他们的编辑更加清晰。。。不幸的是,对我来说,正确发布代码是一场战斗:(.谢谢Samuel…我尝试过两个snipet,除了带参数的snipet…也尝试过那个snipet,但没有任何效果…我确实错过了一些非常简单的东西。我尝试转储$this->area\u id和其他变量,但在更改第一个下拉列表的值时没有得到任何值。尝试转储或记录
$data
使用Debugbar插件的值。
$data
属性将包含所有字段。我使用的“$data['area]”还需要在yaml文件中定义
dependsOn
属性如果您认为文档中缺少某些内容,请在此处打开相关问题:
public function getModuloIdOptions(){
    return Modulos::where('area_id', '=', $this->area->id)->lists('modulo', 'id');
}