如何在 sequelize 中包含相关行数

How to include number of related rows in sequelize

我有两个模型,一个会话模型和一个注册模型。 Register 模型有 Session 模型的外键。

在 Sequelize 中,我将关系描述为:

Session.hasMany(Register, {
  foreignKey: {
    allowNull: false,
  },
});
Register.belongsTo(Session);

我想查询所有的 Session 并在一个名为 num_registers 的键中包含与 Session 相关的 Register 对象的数量。

例如,

[{
    id: 4,
    name: 'a session',
    num_registers: 43
}]

编辑: 假设 Register 模型也有一个 finished 值,它是一个布尔值,我将如何在上面做同样的事情,但也只过滤属于 finished 值为 false 的会话的 Register 对象。

我想你需要使用子查询 sequelize.literal:\

Session.findAll({
    attributes: {
        include: [
            [
                sequelize.literal(`(
                    SELECT COUNT(*)
                    FROM Registers AS register
                    WHERE
                        register.sessionId = session.id
                        AND
                        register.finished = true
                )`),
                'num_registers'
            ]
        ]
    }
});

Subqueries