spe*_*eer 11 mysql node.js sequelize.js
定义模型:
export default function(sequelize, DataTypes) {
return sequelize.define('Item', {
minor: DataTypes.INTEGER,
major: DataTypes.INTEGER,
});
}
Run Code Online (Sandbox Code Playgroud)
我可以将minor和major对定义为复合UNIQUE约束吗?
Vik*_*kur 22
queryInterface.createTable('Item', {
minor: {
type: Sequelize.INTEGER,
},
major: {
type: Sequelize.INTEGER,
}
}, {
uniqueKeys: {
Items_unique: {
fields: ['minor', 'major']
}
}
});
Run Code Online (Sandbox Code Playgroud)
alo*_*d05 20
最近,在V4中,Sequelize将此添加到查询界面:
queryInterface.addConstraint('Items', ['minor', 'major'], {
type: 'unique',
name: 'custom_unique_constraint_name'
});
Run Code Online (Sandbox Code Playgroud)
Jak*_*ake 12
这是一个简单的答案:
major: { type: DataTypes.INTEGER, unique: 'compositeIndex'},
minor: { type: DataTypes.INTEGER, unique: 'compositeIndex'}
Run Code Online (Sandbox Code Playgroud)
来源:http://docs.sequelizejs.com/en/latest/docs/models-definition/
如果它是连接表,您还可以通过belongsToMany关联创建唯一约束:
Major = sequelize.define('major', {})
Minor = sequelize.define('minor', {})
Major.belongsToMany(Project)
Minor.belongsToMany(User)
Run Code Online (Sandbox Code Playgroud)
资料来源:http://docs.sequelizejs.com/en/v3/docs/associations/
就我而言,我希望找到一种方法来实现迁移.我通过在我的up函数结束时附加原始sql查询来完成此操作:
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Item', {
major: {
allowNull: false,
type: Sequelize.INTEGER
},
minor: {
allowNull: false,
type: Sequelize.INTEGER
},
})
.then(function() {
return queryInterface.sequelize.query(
'ALTER TABLE `Item` ADD UNIQUE `unique_index`(`major`, `minor`)'
);
});
Run Code Online (Sandbox Code Playgroud)
相关问题:
我通过使用解决了这个问题addConstraint(...):
await queryInterface.addConstraint('Item', {
fields: ['minor', 'major'],
type: 'unique',
name: 'unique_constraint_name'
});
Run Code Online (Sandbox Code Playgroud)
至少从 v6+ 开始。
| 归档时间: |
|
| 查看次数: |
15379 次 |
| 最近记录: |