javascript-排序没有列'id'的表

我有一个表的以下顺序定义:

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功能?

4个解决方案
64 votes

如果未定义primaryKey: true,则默认情况下续集使用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
});
Ben Fortune answered 2020-06-25T20:11:21Z
21 votes

如果要完全禁用表的主键,则可以使用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');
Ben Fortune answered 2020-06-25T20:11:41Z
11 votes

对于复合主键,应在主键的所有列部分添加“ primaryKey:true”。 Sequelize认为此类列是组合主键的一部分。

gaurav answered 2020-06-25T20:12:01Z
6 votes

如果您的模型没有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_idmodule_id主键。 这样,同一链接将无法多次出现,并且数据库也不会白白创建隐藏的id列。

Andreas answered 2020-06-25T20:12:34Z
translate from https://stackoverflow.com:/questions/29233896/sequelize-table-without-column-id