1

私はsequelizejs 1.4を使用しようとしていますが、ドキュメントを読んだ後でも、関連付けについて混乱しています。

変数ユーザー = 続編.定義('ユーザー', {/* ... /}) 変数プロジェクト = 続編.定義('プロジェクト', {/ ... */})

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 に答える