Laravel Nova:HasOne子资源字段能否依赖父资源字段?
Laravel Nova 子资源字段依赖父资源字段解决方案
这个场景下子资源字段完全可以依赖父资源的Currency字段,dependsOn中需要填写父资源字段的蛇形命名currency。你之前尝试无效可能是闭包逻辑或Nova版本兼容问题,下面是完整的可行示例:
父资源代码示例
Select::make('Currency') ->options([ 'USD' => '美元', 'EUR' => '欧元', 'CNY' => '人民币' ]), HasOne::make('Child', 'child', \App\Nova\ChildResource::class)->required(),
子资源代码示例
Text::make('Some Field') ->dependsOn(['currency'], function (Text $field, NovaRequest $request, FormData $formData) { // 通过FormData直接获取父资源的Currency字段值 $selectedCurrency = $formData->get('currency'); // 根据父资源的货币选项动态调整子字段 if ($selectedCurrency === 'USD') { $field->rules('numeric', 'min:0.01')->help('请输入美元金额'); } elseif ($selectedCurrency === 'EUR') { $field->rules('numeric', 'min:0.01')->help('请输入欧元金额'); } else { $field->rules('numeric', 'min:0.01')->help('请输入人民币金额'); } }),
注意事项
- 确保你的Laravel Nova版本在4.0及以上,旧版本可能不支持内联关联资源跨层级的
dependsOn调用 - 闭包中必须通过
FormData实例获取父资源字段值,而不是直接从请求中取(因为内联表单的字段结构是嵌套的,但父资源字段处于根层级) - 父资源的
Select字段必须正确配置选项,确保提交时能传递有效的currency值
内容的提问来源于stack exchange,提问作者MJ Khan
相关产品推荐
相关产品推荐

