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
数据集作为第二个参数传递以获取"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)