Mar*_*sen 47 javascript mysql node.js sequelize.js
我有一个表的下面的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});
Run Code Online (Sandbox Code Playgroud)
如您所见id,此表中没有列.但是,当我尝试插入它仍然尝试以下sql:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1);
Run Code Online (Sandbox Code Playgroud)
如何禁用id它清楚的功能?
Ben*_*une 69
如果您没有默认定义一个primaryKeysequelize使用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
});
Run Code Online (Sandbox Code Playgroud)
Ben*_*une 21
如果要完全禁用表的主键,则可以使用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');
Run Code Online (Sandbox Code Playgroud)
如果您的模型没有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');
Run Code Online (Sandbox Code Playgroud)
注意:
您似乎正在建立联接表。考虑使用主键academy_id 和 module_id主键。这样,同一链接将无法多次出现,并且数据库也不会白白创建隐藏的id列。
| 归档时间: |
|
| 查看次数: |
41238 次 |
| 最近记录: |