我有三个表:
订单
orderId |价格|数量areaId | customerId
区域
areaId |名称|区域代码
客户
customerId |名称|电邮|移动
我正在使用sequelize作为我的ORM。
我创建了以下关联:
Orders.belongsTo(models.Customers, {
foreignKey: 'customerId',
as: 'Customer'
});
Orders.belongsTo(models.Area, {
foreignKey: 'areaId',
as: 'Area'
});
我想获取属于特定区域的订单,并对得到的结果进行搜索查询。
我还必须在服务器端实现分页。我现在正在执行两个查询,一个查询获取已应用限制(用于分页)的订单,另一个查询获取记录的总数。
Promise.all([ /*Query 1 to get paginated result*/
Orders.findAll({
attributes: ['orderId', 'addressLine1', 'addressLine2', 'Price','Quantities',
'areaId', 'customerId'
],
where: {
[Op.and]: {
areaId: areaId,
[Op.or]: {
'$Area.name$': {
[Op.like]: '%' + searchTerm + '%'
},
'$Customer.name$': {
[Op.like]: '%' + searchTerm + '%'
},
addressLine1: {
[Op.like]: '%' + searchTerm + '%'
},
addressLine2: {
[Op.like]: '%' + searchTerm + '%'
}
}
}
},
include: [{
model: Area,
as: 'Area',
attributes: ['name', 'areaId']
},
{
model: Customers,
as: 'Customer',
attributes: ['name', 'id']
}
],
limit,
offset
}),
/*Query 2 to get total number of records*/
Orders.findAll({
attributes: ['orderId'],
where: {
[Op.and]: {
areaId: areaId,
[Op.or]: {
'$Area.name$': {
[Op.like]: '%' + searchTerm + '%'
},
'$Customer.name$': {
[Op.like]: '%' + searchTerm + '%'
},
addressLine1: {
[Op.like]: '%' + searchTerm + '%'
},
addressLine2: {
[Op.like]: '%' + searchTerm + '%'
}
}
}
},
include: [{
module: Area,
as: 'Area',
attributes: ['name', 'areaId']
},
{
module: Customers,
as: 'Customer',
attributes: ['name', 'customerId']
}
]
})
])
})
.then(orderData => {
res.json({
data: orderData[0],
total: orderData[1].length
})
})
在执行上述查询时出现此错误:
TypeError:无法读取未定义的属性“ getTableName” 在Function._validateIncludedElement(/home/dell/Desktop/24klen_backend/node_modules/sequelize/lib/model.js:465:30)
注意: 如果只运行第一个查询,我会得到结果。使用Promise.all执行两个查询都会引发上述错误。因此,我的直觉是异步执行两个查询都会导致此问题。
让我知道是否需要进一步说明。谢谢。