没有列'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);
我怎样才能禁用它清晰的id
function?
如果你没有定义一个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列。