web-dev-qa-db-ja.com

列 '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関数を無効にするにはどうすればよいですか?

45
Marc Rasmussen

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
});
63
Ben Fortune

テーブルの主キーを完全に無効にする場合は、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');
19
Ben Fortune

複合主キーの場合、主キーのすべての列部分に「primaryKey:true」を追加する必要があります。 Sequelizeは、このような列を複合主キーの一部と見なします。

11
gaurav

モデルに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_idandmodule_id主キー。そうすれば、同じリンクを複数回表示することはできず、データベースは非表示のid列を作成しません。

6
Andreas