表1:TravelGuest
字段:IDNumber
表1:TravelOrder
字段:IDNumber
设置关联
TravelGuest.hasMany(TravelOrder, {foreignKey: 'IDNumber',sourceKey: 'IDNumber'});
TravelOrder.belongsTo(TravelGuest, {foreignKey: 'IDNumber',targetKey: 'IDNumber'});
说明:
– `hasMany`:默认拿**主表主键 (id)** 和子表`IDNumber`做关联,不是拿`TravelGuest.IDNumber`。**所以要加上 `sourceKey: ‘IDNumber’`**
– `belongsTo`:默认拿子表外键去匹配主表主键 (id),**所以要加上 `targetKey: ‘IDNumber’`**
– 没有指定`as`别名,Sequelize 自动生成别名为模型复数:`TravelOrders`
查询代码
const result = await TravelGuest.findAndCountAll({
where: whereClause,
limit: +pageSize,
offset: offset,
// 重点:distinct:true,count 统计 TravelGuest 客户数量,避免订单一对多导致计数错误
distinct: true,
include: [
{
model: TravelOrder,
required: false, // 因为没有设置关联,所以需要设置为可选的
where: {
IDNumber: Sequelize.literal('TravelGuest.IDNumber') // 使用字面量来引用外部查询的字段
},
}
],
});
