Par exemple,
ALTER TABLE users ADD UNIQUE KEY(LoginID, Email);
ALTER TABLE users ADD UNIQUE KEY(Email);
ALTER TABLE users ADD UNIQUE KEY(LoginID);
Comment faire avec Knex.Schema.createTable
Je pense que vous devriez pouvoir le faire avec:
Knex.Schema.createTable('tableName', function(table) {
table.unique(['LoginID', 'Email']);
table.unique('LoginID');
table.unique('Email');
});
Faites-moi savoir si cela ne semble pas fonctionner.
Fonctionne, merci! Préparation pour passer de Sequelize.
j'essaye de lancer une migration
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).notNullable();
table.unique(['network', 'uid']);
table.timestamps();
}).then(function () {
console.log('Users Table is Created!');
});
Mais je n'obtiendrai pas d'index unique
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Qu'est-ce qui ne va pas?
@ theo-ptz L'API a changé il y a quelque temps. Selon la documentation , unique
est maintenant une méthode chaînable que vous utiliseriez de la même manière que vous utilisez primary
et notNullable
.
@bendrucker , merci.
Mais quelque chose ne fonctionne pas.
J'essaye d'exécuter ce code
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).unique();
table.timestamps();
})
J'ai vu cela dans le débogage
--> ComQueryPacket
{ command: 3,
sql: 'create table
utilisateurs (
id int(11) unsigned not null auto_increment primary key,
réseau varchar(3) not null,
uid varchar(64),
created_at datetime,
mis datetime) default character set utf8' }
jour_at
Je n'ai pas eu d'index.
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Qu'est-ce qui ne va pas?
Est-il possible de créer un index unique composite lors de la migration?
Voir les tests d'intégration pour un exemple de contrainte unique composite:
https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
@bendrucker lorsque vous
Votre lien qui ne fonctionne plus: https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
VS ce que vous vouliez dire: https://github.com/tgriesser/knex/blob/0.5.11/test/integration/schema/index.js#L92
Et en utilisant la dernière version (0.8.6): https://github.com/tgriesser/knex/blob/0.8.6/test/integration/schema/index.js#L157
Protip: si vous appuyez sur la touche "y" pendant la navigation sur github, il passe à l'URL actuelle du fichier que vous visualisez. Super pratique, j'aimerais que github le fasse automatiquement lorsque vous collez une URL gh dans un commentaire
Cette fonctionnalité est-elle obsolète car elle ne figure pas dans la documentation?
@RichardSimko Selon la suite de tests, la syntaxe table.unique([...])
pour les clés composées est toujours supportée, donc cela ressemble à un bogue avec la documentation.
Ouais, j'ai réalisé que cela fonctionnait toujours, j'étais juste inquiet qu'il soit sur le point d'être supprimé car il ne figurait pas dans la documentation.
Alors, quelle est la différence entre table.unique([...])
et table.primary([...])
?
Selon la documentation, il semble que l'utilisation de primary([...])
soit la bonne façon de créer des clés primaires composites:
Lorsqu'il est appelé sur une seule colonne, il définira cette colonne comme clé primaire d'une table. Pour créer une clé primaire composée, transmettez un tableau de noms de colonnes:
table.primary(['column1', 'column2'])
. Le nom de la contrainte par défaut esttablename_pkey
sauf siconstraintName
est spécifié.
http://knexjs.org/#Schema -primary
Commentaire le plus utile
Je pense que vous devriez pouvoir le faire avec:
Faites-moi savoir si cela ne semble pas fonctionner.