1

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

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

Project.hasOne(用户)

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

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

p1 = 新项目() u1 = 新用户()

p1.hasOne(u1)

对我来说似乎不合适。我知道我一定遗漏了一些明显的东西,只需要有人拉开灯的开关:)

谢谢

4

2 回答 2

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();
于 2012-10-15T22:38:04.640 回答
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;

我知道这可能会更好,但这可以让你现在就开始工作,并且比用文字更好地解释。

于 2012-12-14T09:57:21.790 回答