如何在管理后台添加输入框实现数据库多表价格按百分比调整
实现步骤
1. 修正批量更新SQL逻辑
你当前写的SQL计算逻辑有误,正确的价格调整计算规则和你原Twig过滤器逻辑对齐即可:原始价格 * (1 + 输入百分比 / 100),再保留到十位。比如上调10%就是价格乘1.1,下调5%就是价格乘0.9。
2. 后台表单改造
给现有输入框增加表单提交和二次确认逻辑,避免误操作:
<form action="/your-update-price-route" method="POST" onsubmit="return confirm('确定要批量调整所有价格吗?该操作不可撤销!')"> <!-- 这里加对应框架的CSRF令牌,比如Laravel的@csrf --> <div> <label>价格调整百分比(正数为上调,负数为下调):</label> <input type="number" name="adjust_percent" step="0.1" min="-99" max="1000" required> </div> <button type="submit">确认调整</button> </form>
3. 后端批量更新逻辑编写
基于你在用的Laravel框架,用事务包裹所有更新操作,避免部分更新成功部分失败导致数据不一致:
public function batchUpdatePrice(Request $request) { // 参数校验 $validated = $request->validate([ 'adjust_percent' => 'required|numeric|min:-99|max:1000' ]); $percent = $validated['adjust_percent']; \DB::beginTransaction(); try { // 需要更新的表和对应价格字段,有多个就依次添加 // 更新第一个表 \DB::statement( "UPDATE table1 SET price = ROUND(price * (1 + ? / 100), -1)", [$percent] ); // 更新第二个表,按需添加 \DB::statement( "UPDATE table2 SET sale_price = ROUND(sale_price * (1 + ? / 100), -1)", [$percent] ); // 更多表更新逻辑继续加... // 原调整系数清空,避免后续前端重复计算 \DB::table('another_pricelist_edit') ->where('id', 1) ->update(['price_edit_kiev' => 0]); \DB::commit(); return back()->with('success', '价格批量调整成功'); } catch (\Exception $e) { \DB::rollBack(); return back()->withErrors('价格调整失败:' . $e->getMessage()); } }
4. 清理冗余逻辑
- 删掉Twig模板中的
| price_kiev过滤器调用,直接输出原始价格即可:
<td class="column-3"> {{ item.price_kiev_1 | number_format(0, '', ' ' ) }} </td>
- 不需要的Twig过滤器、
getPriceEditKiev方法可以直接删除,避免后续逻辑混乱。
注意事项
- 执行批量更新前务必先备份对应价格表数据
- 可添加操作日志记录,保存操作人、调整百分比、操作时间等信息便于回溯
- 数据量较大时建议在业务低峰期操作,避免锁表影响正常业务
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

