Domanda

Attualmente sto sperimentando sequelis e ho due oggetti, a Person e Position, Quando ricevo un elenco di persone, voglio ottenere la loro posizione.

Modelli:

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'});

La mia domanda:

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
    });
});

Guardando il registro non chiede mai domande Person affatto. Devo usare querychaining? Dalla documentazione sono stato in grado di scoprire che è apparso che avrebbe dovuto recuperare auto.

È stato utile?

Soluzione

Ok qui un esempio completo su come risolvere il tuo problema (e sì, è una schifezza):

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
    })
  })
})

Questo otterrà prima tutti gli utenti, quindi otterrà la posizione di ciascun utente e li salverà in _User-Array. Successivamente rende la pagina. Non è testato ma dovrebbe fare il trucco.

Altri suggerimenti

Da aprile 2013 in v1.7.0 devi solo espandere il tuo Associazioni a:

Position.hasMany(User, {foreignKey : 'position_id', as: 'User'});
User.belongsTo(Position, {foreignKey : 'position_id', as: 'Posit'});

e poi trova tutti gli utenti con posizioni associate

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

Da quando ho riscritto sequelumi per 1.0 ho rimosso il supporto delle fetchassociazioni. Lo aggiungerò nelle prossime settimane. Ma diamo un'occhiata al tuo codice:

Stai usando nomi di colonne da sottolineaggio, quindi probabilmente si desidera utilizzare l'opzione di sottolineatura per le colonne generate automaticamente: http://www.sevelizejs.com/?active=usage#usage -> Scorri un po 'verso il basso o cerca sottolinearsi. Questo potrebbe farti salvare le opzioni per BelnetSto/Hasmany.

Quello che vuoi fare con Findall è Smth. come questo:

User.findAll().on('success', function(users) {
  // asd
})

E come ho appena notato ... è un po 'difficile ottenere tutti gli oggetti associati: D così tanto per ora. Spero che ciò abbia aiutato.

Ciò consente di serializzare un JSON per un'azione ovunque su un modello. Leggilo, molto bene, penso che sia il modo migliore

sequelis-virtual-fields

// 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top