2017-02-28 3 views
1

ich ein Modell (unter Verwendung sequelize-cli) definiert haben, als solche:Hinzufügen Verbände Modelle sequelizejs

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
var Rating = sequelize.define('Rating', { 
    star_count: DataTypes.FLOAT, 
    details: DataTypes.TEXT 
}, { 
    classMethods: { 
    associate: function(models) { 
     Rating.hasOne(models.Product); 
    } 
} 
}); 
return Rating; 
}; 

Jedoch, wenn ich Rating in der Datenbank abfragen, nachdem ich db:migrate erhalte ich:

SELECT * from "Ratings"; 
id | star_count | details | createdAt | updatedAt 
----+------------+---------+-----------+----------- 

Die Dokumentation sagt wirklich nichts anderes als das, was ich oben getan habe. Ich würde erwarten, ein product_id Feld hier zu sehen. Was mache ich falsch?

EDIT:

Sequelize-CLI erstellt eine Datei index.js in Modelle genannt. Es sieht wie folgt aus:

'use strict'; 

var fs  = require('fs'); 
var path  = require('path'); 
var Sequelize = require('sequelize'); 
var basename = path.basename(module.filename); 
var env  = process.env.NODE_ENV || 'development'; 
var config = require(__dirname + '/../config.js')[env]; 
var db  = {}; 

if (config.use_env_variable) { 
    var sequelize = new Sequelize(process.env[config.use_env_variable]); 
} else { 
    var sequelize = new Sequelize(config.database, config.username,  config.password, config); 
} 

fs 
    .readdirSync(__dirname) 
    .filter(function(file) { 
    return (file.indexOf('.') !== 0) && (file !== basename) &&  (file.slice(-3) === '.js'); 
    }) 
    .forEach(function(file) { 
    var model = sequelize['import'](path.join(__dirname, file)); 
    db[model.name] = model; 
}); 

Object.keys(db).forEach(function(modelName) { 
    if (db[modelName].associate) { 
    db[modelName].associate(db); 
    } 
}); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

module.exports = db; 

Dies scheint die associate-Methode aufgerufen werden, die die the appropriate functions (hasMany usw.) aufruft und entsprechend der Dokumentation sollten die richtigen Beziehungen aufgebaut. This Tutorial scheint diese Logik zu bestätigen.

Antwort

1

Sequelize Migration erstellen Änderungen nach Migrationsdatei, so dass Sie den Fremdschlüssel mit Bezug angeben müssen, wie https://stackoverflow.com/a/23035179/4583460

Der Befehl alle aditional Schlüssel für den Verein benötigt schaffen wird Sequelize.sync hier gezeigt. Verwenden Sie also entweder sync oder erwähnen Sie Ihre Migrationsdatei, um den Fremdschlüssel ref einzuschließen.

+0

Hallo, danke für Ihre Antwort. Ich habe meine Erklärung mit mehr Klarheit aktualisiert. Es scheint, dass "index.js" in "models" überhaupt nicht aufgerufen wird, so dass die Verknüpfungen nie erstellt werden. Ich bin mir nicht sicher, ob das dasselbe ist wie das, was du sagst oder nicht. Wird diese Datei während der Migration geladen oder nur, wenn ich ein Modell von 'Modellen' benötige? – rec

+0

Nein, das ist nicht die Migrationsdatei, es ist ein separater Ordner. Die index.js muss aufgerufen werden, wenn der Ordner mit all Ihren Modellen erforderlich ist. –

+0

Beispiel, wie man index.js verwendet http://StackOverflow.com/a/42160489/4583460 –