字段列表中的未知列续集
Posted
技术标签:
【中文标题】字段列表中的未知列续集【英文标题】:unknown column in field list sequelize 【发布时间】:2018-10-31 12:57:41 【问题描述】:我正在尝试使用 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”是该表中的一列。
我的 Post 模型如下所示:
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');
;
我做错了什么?
【问题讨论】:
【参考方案1】:当我们在包含关联模型的查找查询中存在限制时,似乎会出现此问题(当我们从查询中删除限制时,上述错误不会出现)。为了解决这个问题,我们可以将选项 subQuery: false 传递给查找。 (https://github.com/sequelize/sequelize/issues/4146)
如果有人遇到同样的问题,这是正确的查询:
db.Post.findAll(
subQuery: false,
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
],
having: db.sequelize.where(db.sequelize.fn('AVG', db.sequelize.col('PostAssessments.rating')),
[Op.eq]: 1,
),
limit: 20,
offset: 2,
group: ['Post.id', 'Boosters.id', 'PostAssessments.id']
)
【讨论】:
你太棒了! 我与这个问题斗争了几个小时,根据我的联想调整我的属性。这是需要的。谢谢!【参考方案2】:这个错误:
models.sequelize.col('Assessments.rating'))
改成
models.sequelize.col('PostAssessments.rating')) // or post_assessments.rating
原因:您正在使用别名来包含 as: 'PostAssessments',
。
【讨论】:
我也试过了,但错误仍然存在。 @user2511906 ,请发布它生成的原始查询以上是关于字段列表中的未知列续集的主要内容,如果未能解决你的问题,请参考以下文章
“字段列表”中的未知列“PROGRAMMEDescription”
找不到列:1054“字段列表”中的未知列“0”-Laravel-我的代码中的任何地方都没有0列
SailsJS/MySQL:“字段列表”中的未知列“NaN”
OperationalError:(1054,“'字段列表'中的未知列'example.example_field'”)