Wenn Sequelize.js verwenden, wird der folgende Code keine Fremdschlüssel auf Tabellen hinzufügen.Sequelize.js Fremdschlüssel
Gibt es eine Möglichkeit, Sequelize.js zu zwingen, diese Fremdschlüsseleinschränkungen hinzuzufügen?
Wenn Sequelize.js verwenden, wird der folgende Code keine Fremdschlüssel auf Tabellen hinzufügen.Sequelize.js Fremdschlüssel
Gibt es eine Möglichkeit, Sequelize.js zu zwingen, diese Fremdschlüsseleinschränkungen hinzuzufügen?
Ich habe gerade versucht, den Code auszuführen, und die Zeilen scheinen in Ordnung geschaffen werden:
CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
clientId
zu main_client
hinzugefügt wird, und idClient
hinzugefügt main_dashboard
Es Sie etwas verwirrt haben scheint Was macht die hasOne-Methode? Jedes Mal, wenn Sie hasOne aufrufen, wird eine Verknüpfung erstellt, sodass Ihr Code die beiden Tabellen effektiv zwei Mal zuordnet. Verfahren Sie suchen, ist belongsTo
Wenn Sie jeder Kunde möchte ein Armaturenbrett haben, würde der Code die folgenden sein:
MainClient.hasOne(MainDashboard, { foreignKey: 'clientId' })
MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' })
Dieses eine clientId Feldtabelle auf dem main_dashboard erzeugt, die das betrifft ID-Feld der Tabelle main_client
Kurz gesagt belongsTo
fügt die Beziehung zu der Tabelle, die Sie die Methode aufrufen, hasOne
fügt es in der Tabelle, die als Argument angegeben ist.
Sie müssen ForeignKeyConstraint hinzuzufügen: true
Versuchen
MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' , foreignKeyConstraint:true })
Bevor ich hatte das gleiche Problem, und gelöst, wenn ich die Funktionsweise der Einstellungen Sequelize verstanden.
Gerade auf den Punkt!
Angenommen, wir haben zwei Objekte: Person und Vater
var Person = sequelize.define('Person', {
name: Sequelize.STRING
});
var Father = sequelize.define('Father', {
age: Sequelize.STRING,
//The magic start here
personId: {
type: Sequelize.INTEGER,
references: 'persons', // <<< Note, its table's name, not object name
referencesKey: 'id' // <<< Note, its a column name
}
});
Person.hasMany(Father); // Set one to many relationship
Vielleicht haben Sie es helfen
Edit:
Sie dieses lesen können, besser zu verstehen:
http://docs.sequelizejs.com/en/1.7.0/docs/associations/#foreign-keys
Die Verwendung von 'references' und' referencesKey' ist jetzt => 'Utils veraltet Nicht-Objektreferenzen Eigenschaft gefunden veraltet. Die Unterstützung für das wird in der Version 4. Erwartete entfernt wird {Referenzen: {Modell: „Wert“, Taste: „Schlüssel“}} statt {Referenzen: „Wert“, referencesKey: „Schlüssel“} .' –
dies ist kein Gutes Beispiel, letzter Befehl sagt, dass "eine Person viele Väter hat", was natürlich nicht klingt – Buksy
Okay, es bekommen. Eigentlich ist das nur ein dummes Beispiel. Was wir wollen, sind Fremdschlüssel-Beschränkungen auf Datenbankebene, genau wie @dankohn sagte. – swampcypress