Laravel Eloquent如何按百分比批量递增更新整数字段?
解决按自身百分比递增字段的问题
你的代码报错是因为DB::raw('price')返回的是Laravel的查询表达式对象,无法直接和PHP的浮点变量做乘法运算——得把整个计算逻辑放到SQL层面处理。
给你两种可行的实现方式:
方式一:使用increment结合DB::raw
直接把百分比计算逻辑嵌入到DB::raw中,让数据库完成运算:
$percentage = $request->percentage; Calendar::where('rate_id', $idRate) ->whereIn('date', $dates) ->increment('price', DB::raw("price * ($percentage / 100)"));
如果你的price是整数类型,需要确保计算结果也是整数的话,可以用ROUND或者强制类型转换:
// 四舍五入取整 DB::raw("ROUND(price * ($percentage / 100))"); // 强制转为无符号整数 DB::raw("CAST(price * ($percentage / 100) AS UNSIGNED)");
方式二:使用update方法实现
本质和increment逻辑一致,直接更新字段值:
$percentage = $request->percentage; Calendar::where('rate_id', $idRate) ->whereIn('date', $dates) ->update([ 'price' => DB::raw("price + price * ($percentage / 100)") ]);
这两种方式都是将计算逻辑交给数据库执行,既避免了PHP层面的类型错误,也减少了数据库交互次数,效率更高。
内容的提问来源于stack exchange,提问作者Phyron
相关产品推荐
相关产品推荐

