请教laravel8 关联查询问题

两个表,一个客户表,一个付费列表。
用户表有固定的需要缴费的金额,付费页面可以分几次付费。
现在需要列出还没交清费用的客户列表。

目的:比如客户表一个客户需要交1000(固定的),付费列表这个客户分三次已经交了900,应该在未缴清列表中显示。

请教下各位大佬,感谢。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

条件关联里面用having

custom: id, need_money,…

custom_pay: id, custom_id, payment,…

Custom HasMany CustomPay

// 未结清客户列表
$notSettleList = Custom::whereHas('customPay', function($query){
    $query->havingRaw('SUM(`custom_pay`.`payment`) < `custom`.`need_money`');
})->get();

不过记得把配置文件里mysql的strict关掉, 不然会报错sql_mode=only_full_group_by错误

1个月前 评论
阿布 (楼主) 1个月前
讨论数量: 6
ShiKi

你客户1000的那个表应该有状态标识才对。直接就可以查出来。

1个月前 评论
阿布 (楼主) 1个月前

一般来说就是同1L的同学说的一样,应该有标识一类的,你可以每次缴费后在主表都执行一个SQL

update 已缴费金额 = 已缴费金额 + 此次缴费金额,  状态 = IF(已缴费金额 + 此次缴费金额 >= 应缴费金额, 1, 0);
1个月前 评论
ShiKi
Xbenn::from('xbenn as a')->select(DB::raw('dyjh_a.xben_id'),DB::raw('dyjh_b.id'),DB::raw('dyjh_a.money as a_money'),DB::raw('dyjh_b.money as b_money'))->leftjoin('xben as b','a.xben_id','b.id')->havingRaw('sum(a_money) >= b_money')->groupBy('a.xben_id');
表名 字段 描述
xben id,money (单条记录表)
xbenn id,xben_id,money (多条记录表)

随便写了下是可以用的,你根据自己情况在优化调整下。@阿布

1个月前 评论
阿布 (楼主) 1个月前

客户表,或者新建一个一对一关联的客户其他表。表里面存储冗余字段 已付款金额 default 0。 付款的时候,存入当前付款金额。 查询为未付款的用户直接查询字段 已付款金额 是否为 0

1个月前 评论

我觉得顾客表多设计一个字段多好,又省了关联查询

1个月前 评论

条件关联里面用having

custom: id, need_money,…

custom_pay: id, custom_id, payment,…

Custom HasMany CustomPay

// 未结清客户列表
$notSettleList = Custom::whereHas('customPay', function($query){
    $query->havingRaw('SUM(`custom_pay`.`payment`) < `custom`.`need_money`');
})->get();

不过记得把配置文件里mysql的strict关掉, 不然会报错sql_mode=only_full_group_by错误

1个月前 评论
阿布 (楼主) 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!