字段列表中的未知列续集

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 ,请发布它生成的原始查询

以上是关于字段列表中的未知列续集的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 #1054 -“字段列表”中的未知列

“字段列表”中的未知列“PROGRAMMEDescription”

找不到列:1054“字段列表”中的未知列“0”-Laravel-我的代码中的任何地方都没有0列

1054,字段列表中的未知列“索引”

SailsJS/MySQL:“字段列表”中的未知列“NaN”

OperationalError:(1054,“'字段列表'中的未知列'example.example_field'”)