续集复合唯一约束
定义模型:
export default function(sequelize, DataTypes) { return sequelize.define('Item', { minor: DataTypes.INTEGER, major: DataTypes.INTEGER, }); }
我可以将minor和major定义为复合UNIQUE约束吗?
这是简单的答案:
major: { type: DataTypes.INTEGER, unique: 'compositeIndex'}, minor: { type: DataTypes.INTEGER, unique: 'compositeIndex'}
来源: http : //docs.sequelizejs.com/en/latest/docs/models-definition/
如果是连接表,也可以通过belongsToMany关联创build一个唯一约束:
Major = sequelize.define('major', {}) Minor = sequelize.define('minor', {}) Major.belongsToMany(Project) Minor.belongsToMany(User)
资料来源: http : //docs.sequelizejs.com/en/v3/docs/associations/
在我的情况下,我想find一种方法来执行我的迁移。 我通过在我的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`)' ); });
相关问题:
将外键作为复合主键encryption
Sequelize模型中外键的唯一约束
最近,在V4中,Sequelize将其添加到查询界面:
queryInterface.addConstraint('Items', ['minor', 'major'], { type: 'unique', name: 'custom_unique_constraint_name' });
queryInterface.createTable('Item', { minor: { type: Sequelize.INTEGER, }, major: { type: Sequelize.INTEGER, } }, { uniqueKeys: { Items_unique: { fields: ['minor', 'major'] } } });