2016-04-26 5 views
1

Ich arbeite an einem zu vielen Assoziationen mit Sequelize. Die meisten Tutorials und Dokumentationen zeigen Beispiele, wenn beide Modelle in derselben Datei definiert sind. Ich habe derzeit zwei Dateien, erste city.js:Sequelize eins zu viele Assoziation in mehreren Dateien

const Promise = require('bluebird'); 
var Country = require('./country'); 

var City = sequelize.define("City", { 
    id: { 
    type: DataTypes.INTEGER, 
    field: 'id', 
    primaryKey: true, 
    autoIncrement: true 
    },... 
}, { 
    freezeTableName: true, 
    timestamps: false 
}); 

City.belongsTo(Country, {foreignKey : 'countryId', as: 'Country'}); 

Promise.promisifyAll(City); 
module.exports = City; 

und eine zweite Datei country.js:

const Promise = require('bluebird'); 
var City = require('./city'); 

var Country = sequelize.define("Country", { 
    id: { 
    type: DataTypes.INTEGER, 
    field: 'id', 
    primaryKey: true, 
    autoIncrement: true 
    }, 
    ... 
}, { 
    freezeTableName: true, 
    timestamps: false, 
    paranoid: false 
}); 

Country.hasMany(City, {foreignKey : 'countryId', as: 'Cities'}); 

Promise.promisifyAll(Country); 
module.exports = Country; 

Wenn ich beide Module importieren und versuchen Objekt zu instanziiert:

var City = require('../model/external/city'); 
var CountryRepository = require('../repository/external/countryRepository'); 

CountryRepository.findById(1).then(function(country) { 
    var city = City.build(); 
    city.name = 'Paris'; 
    city.setCountry(country); 
    console.log('OK'); 
}); 

Ich erhalte den folgenden Fehler:

throw new Error(this.name + '.' + Utils.lowercaseFirst(Type.toString()) + ' called with something that\'s not an instance of Sequelize.Model')

Ist das Problem, dass Modelle promiifiziert werden, bevor sie aus dem Modell exportiert werden oder fehlt mir etwas?

Antwort

1

Ich bin mir nicht sicher, was genau das Problem mit Ihrem Code ist, müsste es ausführen, um sicher zu sein.

Aber wie Sie ein Beispiel gesucht haben, schauen Sie sich dieses Beispiel von Sequelize Github.

Es deklariert Modelle in verschiedenen Dateien und ordnet sie in der index.js.

Später können Sie Ihr anderes Modell mit einem einfachen model atribute model.Country Referenz:

City.belongsTo(model.Country, {foreignKey : 'countryId', as: 'Country'}); 

Zum Beispiel user.js.

+1

Danke, mit ein wenig index.js Modifikation habe ich die Ergebnisse, die ich wollte –