【发布时间】: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