sequelize table 没有专栏 'id'
sequelize table without column 'id'
我有以下 table 的续集定义:
AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
如您所见,此 table 中没有 id
列。但是,当我尝试插入时,它仍然会尝试以下 sql:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1);
如何禁用它明明具有的id
功能?
如果您不定义 primaryKey
,sequelize 默认使用 id
。
如果您想自己设置,只需在您的列上使用 primaryKey: true
。
AcademyModule = sequelize.define('academy_module', {
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
对于复合主键,您应该将 "primaryKey: true" 添加到主键的所有列部分。 Sequelize 将此类列视为复合主键的一部分。
如果要完全禁用 table 的主键,可以使用 Model.removeAttribute
。请注意,这可能会在未来引起问题,因为 Sequelize 是一个 ORM,并且连接需要额外的设置。
const AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
AcademyModule.removeAttribute('id');
如果您的模型没有 ID 列,您可以使用 Model.removeAttribute('id');摆脱它。
见http://docs.sequelizejs.com/en/latest/docs/legacy/
所以在你的情况下会是
AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
AcademyModule.removeAttribute('id');
注:
您似乎正在加入 table。考虑制作 academy_id
和 module_id
主键。这样同一个link就不会出现多次,数据库也不会白白创建一个隐藏id列。
在此解决方案中,sequelize
添加了带有列名 id 的默认主键。
使用您自己定义的主键添加 primaryKey: true
。
AcademyModule = sequelize.define('academy_module', {
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
我有以下 table 的续集定义:
AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
如您所见,此 table 中没有 id
列。但是,当我尝试插入时,它仍然会尝试以下 sql:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1);
如何禁用它明明具有的id
功能?
如果您不定义 primaryKey
,sequelize 默认使用 id
。
如果您想自己设置,只需在您的列上使用 primaryKey: true
。
AcademyModule = sequelize.define('academy_module', {
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
对于复合主键,您应该将 "primaryKey: true" 添加到主键的所有列部分。 Sequelize 将此类列视为复合主键的一部分。
如果要完全禁用 table 的主键,可以使用 Model.removeAttribute
。请注意,这可能会在未来引起问题,因为 Sequelize 是一个 ORM,并且连接需要额外的设置。
const AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
AcademyModule.removeAttribute('id');
如果您的模型没有 ID 列,您可以使用 Model.removeAttribute('id');摆脱它。
见http://docs.sequelizejs.com/en/latest/docs/legacy/
所以在你的情况下会是
AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});
AcademyModule.removeAttribute('id');
注:
您似乎正在加入 table。考虑制作 academy_id
和 module_id
主键。这样同一个link就不会出现多次,数据库也不会白白创建一个隐藏id列。
在此解决方案中,sequelize
添加了带有列名 id 的默认主键。
使用您自己定义的主键添加 primaryKey: true
。
AcademyModule = sequelize.define('academy_module', {
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true
});