续集关联
我试图使用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;
我知道它可以更好,但是这可以让你现在工作,而且比文字更好地解释。