没有列'id'的sequelize表

我有一个表如下的sequelize定义:

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}); 

正如你所看到的,这个表中没有id列。 但是,当我尝试插入它仍然尝试下面的SQL:

  INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1); 

我怎样才能禁用它清晰的idfunction?

如果你没有定义一个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认为这些列是复合主键的一部分。

如果要完全禁用表的主键,则可以使用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'); 

注意:您似乎在制作连接表。 考虑制作academy_id module_id主键。 这种方式相同的链接将不能出现多次,并且数据库不会徒劳地创build一个隐藏的id列。