Как получить количество ассоциаций (связей) по столбцу для статистики | Sequelize
Имеется модель User
User.init(
{
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true,
},
},
{
tableName: 'users',
sequelize,
}
);
Имеется модель Payment
Payment.init(
{
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true,
},
status: {
type: DataTypes.ENUM,
values: Object.values(PaymentStatuses),
defaultValue: PaymentStatuses.created,
allowNull: false,
},
},
{
tableName: 'payments',
sequelize,
paranoid: true,
}
);
Между ними связь один ко многим:
User.hasMany(Payment);
Payment.belongsTo(User);
Модель Payment имеет несколько статусов:
export enum PaymentStatuses {
completed = 'completed',
created = 'created',
error = 'error',
}
Я получаю количество всех платежей:
const user = await User.scope(['paymentsCount']).findByPk(1);
Scope paymentsCount:
User.addScope('paymentsCount', {
attributes: {
include: [[fn('COUNT', col('Payments.id')), 'paymentsCount']],
},
include: [
{
association: 'Payments',
required: false,
attributes: [],
},
],
});
Но так я получаю только все платежи.
Если мне необходимо выбрать платежи по определенному статусу, то я создаю новый scope и заново делаю выборку но уже по определенному статусу, проблема заключается в том, что запросов становится много, это не единственная таблица в которой нужна статистика, есть другие, где статусов уже 5 штук.
Как можно в одном Scope сделать выборку сразу по нескольким статусам и подсчитать их количество?