【问题标题】:Sequelize adds 'id' column in queries whereas I already have a column defined as PKSequelize 在查询中添加“id”列,而我已经有一个定义为 PK 的列
【发布时间】:2020-08-21 10:58:38
【问题描述】:

我有以下模型定义:

const my_table = sequelize.define(
    "my_table",
    {
      tagId: {
        type: DataTypes.STRING,
        primaryKey: true,
        unique: true,
        allowNull: false,
      },
      column1: {
        type: DataTypes.INTEGER,
        references: {
          model: sequelize.table1,
          key: "id",
        },
        allowNull: false,
      },
      birthDate: {
        type: DataTypes.DATE,
        allowNull: false,
      },
      column2: {
        type: DataTypes.INTEGER,
        allowNull: false,
        references: {
          model: sequelize.table2,
          key: "id",
        },
      },
      column3: {
        type: DataTypes.INTEGER,
        allowNull: false,
        references: {
          model: sequelize.table3,
          key: "id",
        },
      },
      column4: {
        type: DataTypes.INTEGER,
        allowNull: false,
        references: {
          model: sequelize.table4,
          key: "id",
        },
      },
      column5: {
        type: DataTypes.INTEGER,
        allowNull: true,
        references: {
          model: sequelize.table5,
          key: "id",
        },
      },
    },
    {
      freezeTableName: true,
    }
  );

如您所见,我已经将 tagId 列定义为主键。但仍然在 findOne 和 findAll 上,我收到以下错误,因为 Sequelize 默认在末尾添加“id”列。

{
        "name": "SequelizeDatabaseError",
        "parent": {
            "fatal": false,
            "errno": 1054,
            "sqlState": "42S22",
            "code": "ER_BAD_FIELD_ERROR",
            "sql": "SELECT `tagId`, `column1`, `birthDate`, `column2`, `column3`, `column4`, `column5`, `id` FROM `my_table` AS `my_table` WHERE `my_table`.`tagId` = '123';"
        },
        "original": {
            "fatal": false,
            "errno": 1054,
            "sqlState": "42S22",
            "code": "ER_BAD_FIELD_ERROR",
            "sql": "SELECT `tagId`, `column1`, `birthDate`, `column2`, `column3`, `column4`, `column5`, `id` FROM `my_table` AS `my_table` WHERE `my_table`.`tagId` = '123';"
        },
        "sql": "SELECT `tagId`, `column1`, `birthDate`, `column2`, `column3`, `column4`, `column5`, `id` FROM `my_table` AS `my_table` WHERE `my_table`.`tagId` = '123';"
    }

有没有办法避免这件事?正如我已经搜索过几乎所有地方但到处都是将任何其他列定义为 primaryKey: true 并且问题应该自行消失。 我是nodejs和sequelize的新手,所以不太了解。我将感谢您的解决方案。

【问题讨论】:

  • 我无法重现此错误。你能看看注册模型实例中的属性并检查是否有id属性吗?
  • 这是什么版本的续集?

标签: node.js express sequelize.js


【解决方案1】:

你可以使用:

my_table.removeAttribute('id')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2020-03-08
    • 2020-10-04
    • 2017-05-27
    • 2021-10-04
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多