Sequelize,让关联回归的问题

Jer*_* B. 8 node.js sequelize.js

我目前正在试验Sequelize并有两个对象,a PersonPosition,当得到一个我希望得到他们的位置的人员列表.

楷模:

var User = sequelize.define('user', {
    first_name: Sequelize.STRING,
    last_name: Sequelize.STRING 
});

var Position = sequelize.define('position', {
    name: Sequelize.STRING,
    affiliation: Sequelize.STRING
});

Position.hasMany(User, { foreignKey : 'position_id' });
User.belongsTo(Position, { foreignKey : 'position_id'});
Run Code Online (Sandbox Code Playgroud)

我的查询:

User.findAll({ fetchAssociations: true }, function(results) {
    //I've tried doing some work in here, but haven't found the correct procedure. 
}).on('success', function(results) {
    res.render('users', {
        title: 'user page',
        users: results
    });
});
Run Code Online (Sandbox Code Playgroud)

看着日志,它根本不会查询Person.我需要使用queryChaining吗?从文档中我发现它似乎应该自动获取关联.

khe*_*hex 8

从2013年4月开始,您需要将您的协会扩展为:

Position.hasMany(User, {foreignKey : 'position_id', as: 'User'});
User.belongsTo(Position, {foreignKey : 'position_id', as: 'Posit'});
Run Code Online (Sandbox Code Playgroud)

然后找到所有具有相关职位的用户

User.findAll({
      include: [{
        model: Position, as: 'Posit'
      }]
}).success(function(match) {
    // your logic
});
Run Code Online (Sandbox Code Playgroud)


sde*_*old 5

好的,这是一个完整的例子,如何解决你的问题(是的,这是废话):

User.findAll().on('success', function(users) {
  var chainer = new Sequelize.Utils.QueryChainer
    , _users  = []

  users.forEach(function(u) {
    var emitter = new Sequelize.Utils.CustomEventEmitter(function() {
      u.getPosition().on('success', function(pos) {
        _users.push({user: u, position: pos})
        emitter.emit('success')
      })
    })
    chainer.add(emitter.run())
  })
  chainer.run().on('success', function() {
    res.render('users', {
      title: 'user page',
      users: _users
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

这将首先获取所有用户,然后获取每个用户的位置并将其保存在_users-array中.然后它呈现页面.它没有经过测试,但应该做到这一点.