0

Nous avons deux modèles, les utilisateurs et les articles. Sous user.jsComment puis-je créer une contrainte composite unique avec des clés étrangères et des clés normales dans Sequelize?

User = Model.define('User', { 
    id: { 
     type: DataType.UUID, 
     defaultValue: DataType.UUIDV1, 
     primaryKey: true, 
    }, 
}); 

Et sous Item.js

Item = Model.define('Item', { 
    id: { 
     type: DataType.UUID, 
     defaultValue: DataType.UUIDV1, 
     primaryKey: true, 
    }, 
}); 

Voici leur association, un utilisateur peut avoir plusieurs éléments.

User.hasMany(Items, { 
    foreignKey: { 
     allowNull: false, 
     name: 'itemId', 
    }, 
    onUpdate: 'cascade', 
    onDelete: 'cascade', 
}); 

Supposons que chaque utilisateur ne dispose que d'un type d'élément. Comment ajouter une contrainte unique pour cela? Le code suivant ne fonctionne pas.

User.hasMany(Items, { 
    foreignKey: { 
     allowNull: false, 
     name: 'itemId', 
     unique: 'userItemUnique', 
    }, 
    onUpdate: 'cascade', 
    onDelete: 'cascade', 
}); 

Item = Model.define('Item', { 
    id: { 
     type: DataType.UUID, 
     defaultValue: DataType.UUIDV1, 
     primaryKey: true, 
     unique: 'userItemUnique', 
    }, 
}); 

Répondre

0

Vous pouvez utiliser des migrations pour cela.

Sequelize-cli fournit une des méthodes addConstraint et andIndex qui peuvent être utilisés pour atteindre

De l'docs

queryInterface.addConstraint('Users', ['email'], 
{ type: 'unique', name: 'custom_unique_constraint_name' 
}); 
+0

Pourquoi vous devez ajouter la contrainte par Sequelize-cli? Est-ce qu'il n'y a aucun moyen de le faire via Sequelize lui-même? – AstroBoogie

+0

Vous pouvez le faire en utilisant les index [This] (https://github.com/sequelize/sequelize/issues/3468) donner des détails à ce sujet Bien que ce ne soit pas ' t sentir très propre façon de faire – Shivam