2013-01-05 12 views
14

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?

Antwort

3

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.

+0

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

4

Sie müssen ForeignKeyConstraint hinzuzufügen: true
Versuchen

MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' , foreignKeyConstraint:true }) 
19

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

+2

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“} .' –

+7

dies ist kein Gutes Beispiel, letzter Befehl sagt, dass "eine Person viele Väter hat", was natürlich nicht klingt – Buksy

Verwandte Themen