参考: segmentfault.com/q/101000002…
1问题
用户表(tableA)关联了多个月卡购买表(tableB),意思就是一个用户每次购买一次月卡,就增加一条记录,(tableA hasMany tableb)但是月卡只是单位,有可能购买的是季卡,那么对应的一条记录里面的quantity就是3, 3个月卡
要求: 我要在1.用户表展示这个用户所有月卡的购买数量,并且 2.拿到最新一次购买的记录
那么也就是实现用Sequelize拿到子表的某个字段的总和
2解决
尝试了不少,最终妥协了,使用sql吧~
tableA.findAll({
attributes: [
[Sequelize.literal(`(
SELECT SUM(tableB.quantity)
FROM tableB AS tableB
WHERE
tableB.user_id = tableA.id
)`),
'total']
],
where:{
//....
},
})
3.实例(我只截取了相关部分)
const sequelize = require('sequelize')
const { rows, count } = await this.ctx.model.HxUser.findAndCountAll({
include: [
{
model: this.app.model.HxVipPaid,
as: 'vipPaidInfo',
attributes: [ 'quantity', 'expiredAt', 'createdAt',
[ sequelize.literal(`(
SELECT SUM(tableB.quantity)
FROM hx_vip_paid AS tableB
WHERE
tableB.user_id = hx_user.id
)`),
'total' ],
],
},
],
})
return { list: rows, total: count }
4.结果
因为某个用户对应的购买记录有4条,购买的数量分别为 一个月,一个月,季卡,一个月, 也就是quantity为 1, 1, 3, 1,求和为6, 这里的话是多条数据每个都带了一个total,因为需求2我是拿最新一条,应该能满足大家需求的.