首页 > 解决方案 > Sequelize raw select 查询无法访问表

问题描述

我有以下 Sequelize 模型:

/* jshint indent: 2 */
const Sequelize = require("sequelize");
const db = require('../../sequelize/index.js');
module.exports = function (sequelize, DataTypes) {
  const Document = sequelize.define(
    "Document",
    {
      id: {
        type: DataTypes.INTEGER,
        allowNull: false,
        primaryKey: true,
        autoIncrement: true
      },
      documentNumber: {
        type: DataTypes.TEXT,
        allowNull: true,
      },
      title: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      confidential: {
        type: DataTypes.BOOLEAN,
        allowNull: true,
        defaultValue: false
      },
      description: {
        type: DataTypes.STRING,
        allowNull: true,
      },
      createdBy: {
        type: DataTypes.TEXT,
        allowNull: false,
      },
      state: {
        type: DataTypes.ENUM({ values: ['DRAFT', 'UNDERREVIEW', 'APPROVED', 'OBSOLETE'] }),
        allowNull: false,
      },
      createdAt: {
        allowNull: true,
        type: DataTypes.BIGINT,
        field: 'created_at'
      },
      updatedAt: {
        allowNull: true,
        type: DataTypes.BIGINT,
        field: 'updated_at'
      }
    },
    {
      sequelize,
      tableName: "document",
      schema: 'dms',
      freezeTableName: true,
      underscored: true,
      alter: true,
      hooks: {
        beforeCreate: (record, options) => {
          record.dataValues.createdAt = Math.floor(Date.now() / 1000);
          record.dataValues.updatedAt = Math.floor(Date.now() / 1000);
        },
        beforeUpdate: (record, options) => {
          record.dataValues.updatedAt = Math.floor(Date.now() / 1000);
        },
      },
    }
  );
  return Document;
};

当我使用 sequelize.sync 时,sequelize 在数据库中创建一个表作为“dms.document”。

我正在使用以下代码在 nodejs 中动态查询表。

        let tableName = optionJson.tableName; 
        let columnName = optionJson.valueColumn;
        let resultSet = await db.sequelize.query(`select ${columnName} from ${tableName}`, {
            type: QueryTypes.SELECT,
            raw: true
        });
        return resultSet;

当我执行代码时,我收到以下错误:

    code: 'ER_NO_SUCH_TABLE',
    errno: 1146,
    sqlState: '42S02',
    sqlMessage: "Table 'dms.document' doesn't exist",
    sql: 'select id from document',
    parameters: undefined
  },
  sql: 'select id from document',

我尝试了 dms.document 和 document,在这两种情况下我都收到了上述错误。可能是什么问题?

标签: mysqlnode.jssequelize.js

解决方案


推荐阅读