Laravel中如何在查询中计算两个withSum统计值的差值
Laravel 查询中直接计算关联统计字段差值的方法
你可以通过在查询链中添加自定义计算字段的方式,直接得到purchases_sum_quantity减去solds_sum_quantity的差值。需要注意的是,如果某个关联没有对应数据,withSum返回的统计值会是null,所以要用COALESCE函数将null替换为0,避免计算结果出错。
方法一:使用addSelect结合DB::raw
use Illuminate\Support\Facades\DB; $titles = Title::withSum('solds', 'quantity') ->withSum('purchases', 'quantity') ->addSelect([ 'quantity_diff' => DB::raw('COALESCE(purchases_sum_quantity, 0) - COALESCE(solds_sum_quantity, 0)') ]) ->paginate(20);
方法二:使用selectRaw(Laravel 9+ 更简洁)
$titles = Title::withSum('solds', 'quantity') ->withSum('purchases', 'quantity') ->selectRaw('*, COALESCE(purchases_sum_quantity, 0) - COALESCE(solds_sum_quantity, 0) as quantity_diff') ->paginate(20);
完成查询后,你可以直接通过模型实例访问这个差值字段:
foreach ($titles as $title) { echo $title->quantity_diff; // 输出采购总量减去销售总量的差值 }
内容的提问来源于stack exchange,提问作者Anry Reese
相关产品推荐
相关产品推荐

