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

JLo*_*ngo 3 php octobercms dropdown octobercms-backend

我坚持这个问题,经过一段时间寻找一个例子,我无法弄清楚如何解决.

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

我有一个带有'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
Run Code Online (Sandbox Code Playgroud)

我还有另一个表'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
Run Code Online (Sandbox Code Playgroud)

在"区域"模型中,我有:

 ... 
 public $hasMany = [
    'modulos' => ['JML\Gkb\Models\Modulos']
 ];
Run Code Online (Sandbox Code Playgroud)

在我所拥有的'Modulos'模型中

....
 public $belongsTo = [
    'area' => ['\JML\Gkb\Models\Area']
];
Run Code Online (Sandbox Code Playgroud)

我有其他模型与以前的字段有关系和两个下拉字段工作正常没有任何过滤器,麻烦的字段(模数)我找不到根据'区域'下拉列表的值进行过滤的方法我有以下在fields.yaml.

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

area
  type: dropdown
  tab: Geral
Run Code Online (Sandbox Code Playgroud)

在我的模型PHP文件中我定义了下拉列表,我有:

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

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

有任何帮助吗?

TIA

JL

Sam*_*ges 5

数据集作为第二个参数传递以获取"getOptions"方法.以下是可行的替代方法:

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

您可能还想尝试访问该area_id值:

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

或者效率较低area->id(可能需要异常处理):

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