Wie Primärschlüssel festlegen Typ UUID über Sequelize CLI
Ich bin erstellen einer DB-Modell über Sequelize CLI mit diesem Befehl:
sequelize model:create --name User --attributes "firstname:string, lastname:string"
Diese erstellt das entsprechende Skript für die migration:
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstname: {
type: Sequelize.STRING
},
lastname: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('Users');
}
};
Wie gezeigt, ist der primäre Schlüssel ist integer
.
Gibt es eine Möglichkeit, standardmäßig die CLI verwenden UUID
statt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müsstest du Bearbeiten Sie die generierte Datei manuell ändern
Sequelize.INTEGER
zuSequelize.UUID
, dann entfernen Sie dieautoIncrement: true
Eigentum, und diesesdefaultValue: uuid()
.npm install uuid
Also Ihr Modell würde wie folgt Aussehen:
Könnte man auch wieder eine Funktion für die
defaultValue
etwa so:Andere Lösung wäre, fügen Sie eine
beforeCreate
Haken in Ihrem Modell.npm install uuid
odernpm install uuidv4
ES5const uuidv4 = require('uuid/v4');
oderconst uuid = require('uuidv4')
uuidv4();
oderuuid()
ES6import uuid from 'uuid/v4';
uuid() das ersetzen derdefaultValue
den Wert der Eigenschaft mit einem Aufruf an die gewünschten/importiertuuid
. Dies ermöglichen die automatische Generierung von Uuid auf jedem speichern.uuid()
Zeile wird nur einmal und bekommt als für alle Sätze gleich() => uuid()
zu defaultValue löst mein problem in der mysql-db.defaultValue: Sequelize.UUIDV4
mein problem gelöst mit wiederholten uuid.Die Letzte Antwort wird nicht funktionieren, weil die
uuid()
Funktion legen Sie eine eindeutige default-Wert für alle Benutzer in Ihrer Datenbank. Da Sie einen Primärschlüssel, werden Sie in der Lage zu bestehen nur ein Benutzer in der Datenbank, dann bekommen alle die gleiche uuid-Wert und, natürlich, wird nicht beibehalten werden.Also... Ihr habt zu:
autoIncrement: true,
und ändern Sie den Typ der id austype: Sequelize.INTEGER
zutype: Sequelize.UUID
npm i uuid --save
In Ihrem generierte User-Modell, ändern Sie die
beforeCreate
- Funktion zur Generierung einer neuen uuid vor dem einfügen in die Datenbank, wie diese:Gelten die änderungen Ihrer migration zu tun:
sequelize db:migrate:undo
Folgen vonsequelize db:migrate
Testen.
Können Sie ändern Ihre Migrations-script mit diesem script
Es funktioniert für mich.