私は次のテーブルの続編定義を持っています:
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
関数を無効にするにはどうすればよいですか?
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
});
テーブルの主キーを完全に無効にする場合は、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');
複合主キーの場合、主キーのすべての列部分に「primaryKey:true」を追加する必要があります。 Sequelizeは、このような列を複合主キーの一部と見なします。
モデルに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
andmodule_id
主キー。そうすれば、同じリンクを複数回表示することはできず、データベースは非表示のid列を作成しません。