Sequelize汇总关联的子表数据/Sequelize求和联表数据

1,035 阅读1分钟

参考: 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我是拿最新一条,应该能满足大家需求的.