web-dev-qa-db-ja.com

検索時にフェッチする関連付けを続編します(1.6)

sequelize 1.6の変更ログには、次のものがあります。

[機能] findおよびfindAllの関連付けプリフェッチを追加しました

問題はどのようにですか?

次のモデルを定義しています。

var self = {
    Medium: client.define("Medium", {
        name: Sequelize.STRING,
        description: Sequelize.TEXT
    },

    User: client.define("User", {
        firstName: Sequelize.STRING,
        lastName: Sequelize.STRING,
        email: Sequelize.STRING,
        aboutArt: Sequelize.TEXT,
        bio: Sequelize.TEXT,
        password: Sequelize.STRING,
        description: Sequelize.TEXT
    }
};
self.User.hasMany(self.Medium, { as: 'Media' });
self.Medium.hasMany(self.User);

for(var key in self){
    var model = self[key];
    model.sync();
}

後でこのようなユーザーをフェッチすると:

 User.find(id)
    .success(function(record) {
        //record has no media!
    })

ユーザーインスタンスにはリストメディアがありません。アソシエーションを自動フェッチするにはどうすればよいですか?

13
mkoryak

ところで:Sequelize 1.6.0がリリースされたので、積極的な読み込みの構文が少し変更されました。

User.find({ where: {id: id}, include: [Media] }).success(function(user){ 
  console.log(user.media)
})

したがって、モデルの名前の代わりにモデルをincludeステートメントに渡す必要があります。

28
sdepold

sdepoldが実際にコードを作成しましたが、彼が決めた構文は次のとおりです。

User.find({ where: {id: id}, include: ['Media'] }).success(function(user){ 
  console.log(user.media)
})
6
Dan Kohn

答えは現在、コード、テスト、そして...私の頭の中だけで利用可能です:D

User.find({ where: {id: id}, include: ['Media'] }).success(function(user){ 
  console.log(user.media)
})

まだ利用できないドキュメントの理由iiiiiisは、リリースが現在アルファ版であるという事実です。

4
sdepold