Laravel Nova 4中BelongsTo关联依赖失效:如何按分类筛选商品?
解决Laravel Nova 4中根据分类动态筛选商品的问题
原代码的问题在于:
- 错误地用当前订单资源的
uuid作为分类筛选条件,而非用户实际选中的分类ID - 未设置字段依赖关系,Nova无法监听分类选择的变化来更新商品选项
以下是修正后的代码:
BelongsTo::make('Category', 'category', Category::class) ->displayUsing(fn($category) => $category->name), BelongsTo::make('Product', 'product', Product::class) // 指定依赖category字段,监听其值变化 ->dependsOn(['category'], function (BelongsTo $field, NovaRequest $request, FormData $formData) { // 根据选中的分类ID筛选对应商品 $field->query(fn($query) => $query->when( $formData->category, fn($q) => $q->where('category_uuid', $formData->category) )); }) // 可选:不需要商品搜索功能时关闭,避免逻辑冲突 ->searchable(false),
关键说明:
dependsOn(['category']):告知Nova商品字段的选项依赖分类字段,分类选择变化时自动刷新商品列表FormData $formData:通过该实例获取用户当前选中的分类ID,创建、编辑场景均能正常取值when条件:仅当选中分类时添加筛选规则,未选分类时默认显示全部商品(如需清空选项,可替换为$q->whereRaw('1=0'))
内容的提问来源于stack exchange,提问作者Bryant
相关产品推荐
相关产品推荐

