我有以下模型定义:
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 的新手,所以不太了解它。我将感谢您的解决方案。
最佳答案
您可以使用:
my_table.removeAttribute('id')
关于node.js - Sequelize 在查询中添加 'id' 列,而我已经有一列定义为 PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61635904/