2017-03-08 149 views
2

我坚持这个问题,我找不到如何解决一段时间后寻找一个例子。OCTOBERCMS下拉选项取决于其他下拉选定的值

两个下拉选项依赖于它们的值。

我有“区域”值而确定一台(套与简单的树行工作)与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'] 
]; 

我有与先前场和两个下拉领域没有任何过滤好的工作关系的其他模式,以及troubleshoting场(modulos),在那里我找不到根据“区域”下拉列表的值过滤的方法我在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

+0

Ty为编辑,它更清楚与他们......不幸的是,这是我的战斗正确地发布代码:(。 – JLongo

回答

4

的数据集的第二个参数,以获得 “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'); 
} 
+0

谢谢塞缪尔...我已经尝试过两个snipets除了有参数...也尝试过,但没有用...肯定我失去了一些真正简单的东西。我尝试在$ this-> area_id和onther变量上做转储,但是当我改变第一个下拉列表的值 – JLongo

1

我解决了这个下拉的问题,其他人用相同的目标用下面的步骤:

  • 我有他们的'关系'小部件。将它们更改为“下拉式”小部件。
  • 定义'取决于'字段。
  • 将'Preset'字段定义为上面的字段。我认为这是没有记录在任何地方的问题解决方案的缺失链接,我在尝试/错误的基础上到达那里(可能将此添加到10月文档中很有价值)。
  • 在我的问题结尾或塞缪尔答案的第二个snipet过滤snipet代码选项。

这解决了我的问题。

谢谢大家。

+0

如果您认为文档中缺少某些内容,请在此处打开相应的问题:https://github.com/octobercms/docs/issues – Meysam