Laravel Backpack v6 select2_from_ajax字段无法正常返回AJAX值
Laravel Backpack CRUD select2_from_ajax 按客户定价体系展示产品价格的问题解决
问题场景
在Laravel Backpack CRUD开发中,需要实现一个select2_from_ajax字段,根据客户选择的定价体系(不同客户对应不同定价体系),展示对应产品的价格选项。
遇到的问题及尝试方案
- 链式调用
fetch+where的方式
最初编写fetchProductPrice方法时,采用链式调用添加过滤条件:
return $this->fetch(\App\Models\Price::class)->where('price_setting_id', $priceSettingId)->where('product_id', $productId);
结果是部分产品能返回正确价格,但有部分产品返回空响应,无法稳定获取数据。
- 直接返回数组的方式
尝试直接构造返回数据:
return ['id' => $price->id, 'text' => $price->nominal];
虽然能获取到所需的id和价格数据,但无法在select2_from_ajax字段中正常显示,因为不符合组件期望的响应格式。
最终解决方案
通过自定义fetch函数的配置数组,使用query回调注入过滤条件,解决了查询异常的问题:
return $this->fetch([ 'model' => \App\Models\Price::class, 'searchable_attributes' => ['nominal'], 'paginate' => 10, 'query' => function($model) use ($priceSettingId, $productId) { return $model->where('price_setting_id', $priceSettingId) ->where('product_id', $productId); } ]);
这种方式遵循Laravel Backpack fetch方法的设计规范,通过闭包在内部查询逻辑中注入过滤条件,既能保证查询稳定性,又能返回组件所需的标准响应格式(包含分页、数据列表等结构),确保字段正常渲染。
内容的提问来源于stack exchange,提问作者user29152626
相关产品推荐
相关产品推荐

