2012-07-21 79 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; 

我知道它可以更好,但這樣可以讓你現在的工作,而且比文字更好地解釋。