续集关联

我试图使用sequelizejs 1.4,并阅读文档后,仍然混淆关联。

var User = sequelize.define('User',{/ * … /})var Project = sequelize.define('Project',{/ … * /})

Project.hasOne(用户)

每次都必须包含这些代码吗? 我试图将模型分解为单个文件,但是看着这个让我觉得我需要在项目模型中定义用户。

或者,我是否需要将模型关联到更高层次?

p1 = new Project()u1 = new User()

p1.hasOne(U1)

只是对我来说不正确。 我知道我必须错过一些明显的东西,只需要有人拉开开灯的开关:)

谢谢

简短的回答,是的。

只要创build一个关联文件,将有关联:

module.exports = function(db){ var sup = db.import(__dirname+'/sup.js'); var node = db.import(__dirname+'/node.js'); sup.hasMany(node); node.hasOne(sup); return db; } 

现在在您的应用程序或主文件中创build数据库后,只需要这个:

 var database = new Sequelize(...); database = require(__dirname+'/association.js'); database.sync(); 

为每个模型创build一个像这样的文件:Car.js,City.js

然后在每个模型中你都这样做:

 module.exports.getModel = function(sequelize){sequelize.define("Car"...)} module.exports.setAssociations(models){models.Car.hasOne(models.City)} 

要做到这一点,你要抽象的方式是这样做的:

  var sequelize = this.__connection; var Sequelize = require('sequelize'); var rootFolder = this.__rootFolder; var modelsNames = this.getModelsNames(rootFolder); var i = k = modelsNames.length; var modelName; var models = {}; var modelFactoryFn; // load models while(i--){ modelName = modelsNames[i]; var Model = require(path.resolve(rootFolder, modelName)).getModel(sequelize); if(!Model){ throw new Error("No model returned from " + path.resolve(rootFolder, modelName)); } models[modelName] = Model; } // build associations var modelFile; while(k--){ modelName = modelsNames[k]; modelFile = require(path.resolve(rootFolder, modelName)); if(modelFile.buildAssociations){ modelFile.buildAssociations(models); } } this.__models = models; 

我知道它可以更好,但是这可以让你现在工作,而且比文字更好地解释。