2012-07-21 81 views
1

我正在尝试使用sequelizejs 1.4,并且在阅读文档后,我仍然对关联感到困惑。续集关联

变种用户= sequelize.define( '用户',{/ * ... /}) VAR项目= sequelize.define( '项目',{/ ... * /})

Project.hasOne(User)

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

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

P1 =新的项目() U1 =新用户()

p1.hasOne(U1)

只是看起来不正确我。我知道我必须失去了一些东西很明显,只是需要有人拉,关于光:)

感谢

回答

3

简短的回答打开开关,是的。

只需创建,将有关联的关联文件:在创建数据库之后

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; 
} 
应用程式或主文件

现在只是需要这样的:

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

对于每个模型创建像这样的文件: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; 

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