You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:41:31