【发布时间】:2018-09-20 18:57:42
【问题描述】:
我正在尝试根据不同的参数在关联表中获取两个记录计数:
// Models
var Customer = sequelize.define('Customer', {
name: DataTypes.STRING,
});
var Invoice = sequelize.define('Invoice', {
invoiceRef: DataTypes.STRING,
status: {
type: DataTypes.ENUM,
values: ['UNPAID', 'PAID'],
defaultValue: 'UNPAID'
},
isArchived: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
});
Invoice.associate = function(models) {
Invoice.belongsTo(models.Customer);
}
Customer.associate = function (models) {
Customer.hasMany(models.Invoice);
}
// Query
Customer.findAll({
attributes: {
include: [
[models.Sequelize.fn("COUNT", models.Sequelize.fn("DISTINCT", models.Sequelize.col("Invoices.id"))), "totalInvoices"],
[models.Sequelize.fn("COUNT", models.Sequelize.fn("DISTINCT", models.Sequelize.col("UnpaidInvoices.id"))), "unpaidInvoices"]
]
},
include: [
{
model: models.Invoice,
where: { isArchived: false },
attributes: [],
required: false
},
{
model: models.Invoice,
where: { isArchived: false, status: 'UNPAID' },
attributes: [],
required: false
},
],
group: ['Customer.id']
})
问题在于,当多次包含同一个关联表时,Sequelize 会为 SQL 查询中表的两个实例分配相同的名称:
左外连接
InvoicesASInvoicesONCustomer.id=Invoices.CustomerIdANDInvoices.isArchived= 0
左外连接InvoicesASInvoicesONCustomer.id=Invoices.CustomerIdANDInvoices.isArchived= 0 ANDInvoices.'@UNPAID'365 p>
有没有办法为查询中的连接表指定不同的名称?例如:
左外连接
InvoicesASInvoicesONCustomer.id=Invoices.CustomerIdANDInvoices.isArchived= 0
左外连接InvoicesASUnpaidInvoicesONCustomer.id=Invoices.CustomerIdANDInvoices.isArchived= 0 ANDInvoices@. @ = '未付'
【问题讨论】:
标签: sql count associations sequelize.js