序列化,使关联返回问题

| 我目前正在尝试Sequelize,并且有两个对象,分别是
Person
Position
,在获取人员列表时,我想获得其位置。 楷模:
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\'});
我的查询:
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
    });
});
看着日志,它根本不会查询“ 0”。我需要使用queryChaining吗?从文档中,我发现它似乎应该自动获取关联。     
已邀请:
        好吧,这里是一个完整的示例,说明如何解决您的问题(是的,这很废话):
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
    })
  })
})
这将首先获取所有用户,然后获取每个用户的位置并将其保存在_users-array中。之后,它将呈现页面。它未经测试,但应该可以解决。     
        从2013年4月起,在v1.7.0中,您只需要将关联扩展到:
Position.hasMany(User, {foreignKey : \'position_id\', as: \'User\'});
User.belongsTo(Position, {foreignKey : \'position_id\', as: \'Posit\'});
然后找到所有具有相关职位的用户
User.findAll({
      include: [{
        model: Position, as: \'Posit\'
      }]
}).success(function(match) {
    // your logic
});
    
        由于我重写了1.0的续集,因此取消了对fetchAssociations的支持。我将在接下来的几周内添加它。但是,让我们看一下您的代码: 您正在使用类似下划线的列名,因此您可能想对自动生成的列使用下划线选项:http://www.sequelizejs.com/?active=usage#usage->向下滚动或搜索下划线。这可以为您保存belongsTo / hasMany的选项。 您想对findAll进行的操作是smth。像这样:
User.findAll().on(\'success\', function(users) {
  // asd
})
正如我刚注意到的那样,要获取所有关联的对象:D有点棘手。希望能有所帮助。     
        这允许序列化json以执行关于模型的任何操作。阅读,很好,我认为那是最好的方法 续集虚拟场
// define models 
var Person = sequelize.define(\'Person\', { name: Sequelize.STRING });
var Task = sequelize.define(\'Task\', {
name: Sequelize.STRING,
nameWithPerson: {
    type: Sequelize.VIRTUAL,
    get: function() { return this.name + \' (\' + this.Person.name + \')\' }
    attributes: [ \'name\' ],
    include: [ { model: Person, attributes: [ \'name\' ] } ],
    order: [ [\'name\'], [ Person, \'name\' ] ]
}
});

// define associations 
Task.belongsTo(Person);
Person.hasMany(Task);

// activate virtual fields functionality 
sequelize.initVirtualFields();
    

要回复问题请先登录注册