gpt4 book ai didi

php - 在 laravel 框架中的 whereraw/where 中使用 SUM

转载 作者:行者123 更新时间:2023-11-29 03:22:52 35 4
gpt4 key购买 nike

我有列命名为 PlanCost Discount AmountPaid和一个包含 Due 的标签

在这里,我试图只显示 PlanCost != AmountPaid 所在的行

这是我的整个查询

 $getID = isset($inputArray['id']) ? $inputArray['id'] : 0;
$query = TelePlanSelect::join('tele_plan', 'tele_plan.id', '=', 'tele_plan_select.teleplan_id' )
->leftjoin('tele_payment_defs', 'tele_payment_defs.telereg_id', '=', 'tele_plan_select.telereg_id')
->leftjoin('tele_payment_items', function ($join){
$join->on('tele_payment_items.telepaymentdefs_id', '=', 'tele_payment_defs.id')
->on('tele_payment_items.teleplan_id', '=' ,'tele_plan.id');
} )

->selectRaw('tele_plan.id as `PlanID`,' .
'tele_plan.plan_name as `PlanName`,' .
'tele_plan.plan_cost as `PlanCost`,' .
'tele_plan.plan_details as `PlanDetails`,'.
'sum(tele_payment_items.amount) as `AmountPaid` ,'.
'COALESCE(sum(tele_payment_items.discount),0) as `Discount`,'.
'(COALESCE(tele_plan.plan_cost,0) - sum(COALESCE(tele_payment_items.discount,0))) - sum(coalesce(tele_payment_items.amount, 0)) as `Due` '

)
->where('tele_plan_select.telereg_id', $getID)
->groupBy('tele_plan.id')
->where(' tele_plan.plan_cost', '!=', 'sum(tele_payment_items.amount)');

我不确定我们是否可以使用 sumwhere/whereraw有人可以帮助我吗?

编辑 1: {"message":"SQLSTATE[HY000]: General error: 1111 Invalid use of group function (SQL: select count(*) as aggregate from (select tele_plan.id as计划编号 ,tele_plan.plan_name as计划名称 ,tele_plan.plan_cost as计划成本 ,tele_plan.plan_details as方案详情 ,sum(tele_payment_items.amount) as支付金额 ,COALESCE(sum(tele_payment_items.discount),0) as折扣,(COALESCE(tele_plan.plan_cost,0) - sum(COALESCE(tele_payment_items.discount,0))) - sum(coalesce(tele_payment_items.amount, 0)) as由于 from tele_plan_select inner join tele_plan on tele_plan .编号 = tele_plan_select . teleplan_id left join tele_payment_defs on tele_payment_defs . telereg_id = tele_plan_select . telereg_id left join tele_payment_items on tele_payment_items . telepaymentdefs_id = tele_payment_defs .编号 and tele_payment_items . teleplan_id = tele_plan .编号 where tele_plan_select . telereg_id = 8 and tele_plan.plan_cost <> sum(tele_payment_items.amount) group by tele_plan .编号 ) as a) @ C:\\xampp\\htdocs\\halframework\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:625","status":"failed"}

最佳答案

您可以使用像sum 这样的原始sql 函数,但是您必须将它们包装在laravel 的\DB::raw() 中。函数,这样它们就不会被转义。

对于您的 Where 子句,您应该执行以下操作

->where('tele_plan.plan_cost', '<>', \DB::raw('sum(tele_payment_items.amount)'));

你也可以使用 laravel 的 WhereRaw编写自己的条件的函数:

->whereRaw('tele_plan.plan_cost <> sum(tele_payment_items.amount)')

更新:该错误表明 GroupBy 存在问题。之所以这样是因为a sum 只能在group by 之后做,而a where 不行。因此,必须将其添加到 HAVING clause 中。 .

用 having 替换 where,这应该有效:

->havingRaw('tele_plan.plan_cost <> sum(tele_payment_items.amount)');

关于php - 在 laravel 框架中的 whereraw/where 中使用 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41034870/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com