2016-04-24 13 views
0

BenutzermodellAbfrage Verwandte BelongsToMany

var User = db.Model.extend({ 
    initialize: function() { 
     this.on('creating', this.generateId, this); 
    }, 
    tableName: 'users', 
    hasTimestamps: true, 
    hidden: ['password'], 
    companies: function(){ 
     return this.belongsToMany(
     require('./company'), 
     'users_companies', 
     'user_id', 
     'company_id' 
    ) 
    }, 
    charities: function(){ 
     return this.belongsToMany(
     require('./charity'), 
     'users_charities', 
     'user_id', 
     'charity_id' 
    ).withPivot(['company_id']); 
    }, 
    generateId: function(model, attrs, options) { 
     model.set('id', uuid.v4()); 
    } 
}); 

-Controller

exports.getAllCharities = function(req, res){ 
    new User({ id: req.user.id }) 
    .charities() 
    .fetch() 
    .then(function(charities){ 
    return res.json(charities.toJSON()); 
    }) 

Die oben genannten Arbeiten, aber ich brauche der Lage sein, die zurück gemeinnützige Organisationen zur Abfrage durch den Drehfeld ‚company_id‘ zu filtern. Wenn Sie charities.where ({company_id: 1}). Fetch() versuchen, erhalten Sie eine Ausnahme, die angibt, wo keine Funktion von Wohltätigkeitsorganisationen besteht.

eine Lösung

new User({ id: req.user.id }) 
    .charities() 
    .query('where', 'company_id', '=', req.query.companyid) 
    .fetch() 
    .then(function(charities){ 
    return res.json(charities.toJSON()) 
    }) 
gefunden

kann den Unterschied zwischen, dass jemand erklären und .where({company_id: req.query.companyid})

Antwort

0

Nun verwenden, .where({company_id: req.query.companyid}) verwenden sind Sie im Grunde selbst limitierend „diese - gleich - das“. Wenn Sie query verwenden, können Sie viel mehr erreichen, z.

Außerdem können Sie query ein wenig anders verwenden und Sie können in den Knex Query Builder tippen. Z.B .:

new Person().query(function(qb) { 
    qb.whereIn('id', [2, 4]); 
}).fetch().then(function(){}); 

diese Weise können Sie im Grunde alles zugreifen können knex.js Angebote: http://knexjs.org/