我正在尝试使用Sequelize执行以下查询:
db.Post.findAll({
include: [
{
model: db.User,
as: 'Boosters',
where: {id: {[Op.in]: a_set_of_ids }}
},
{
model: db.Assessment,
as: 'PostAssessments',
where: {UserId: {[Op.in]: another_set_of_ids}}
}
],
attributes: [[db.sequelize.fn('AVG', db.sequelize.col('Assessments.rating')), 'average']],
where: {
average: 1
},
group: ['id'],
limit: 20
})
但是我遇到了这个错误:“ER_BAD_FIELD_ERROR” . “字段列表”中的未知列“Assessments.rating”,虽然我在数据库中有“Assessments”表,“rating”是该表中的一列 .
我的帖子模型如下所示:
const Post = sequelize.define('Post', {
title: DataTypes.TEXT('long'),
description: DataTypes.TEXT('long'),
body: DataTypes.TEXT('long')
}, {
timestamps: false
});
Post.associate = function (models) {
models.Post.belongsToMany(models.User, {as: 'Boosters', through: 'UserPostBoosts' });
models.Post.hasMany(models.Assessment, {as: 'PostAssessments'});
};
我究竟做错了什么?
2 回答
当我们在查找查询中有一个限制时,似乎会出现这个问题,其中包含相关的模型(当我们从查询中删除限制时,上面的错误不会显示) . 为了解决这个问题,我们可以将一个选项subQuery:false传递给find . (https://github.com/sequelize/sequelize/issues/4146)
如果有人遇到同样的问题,这是正确的查询:
错误与这一个:
将其更改为
Reason : 您正在使用包含
as: 'PostAssessments',
的别名 .