2016-04-24 2 views
0

Модель пользователяЗапрос Связанные 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()); 
    } 
}); 

Контроллер

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

Вышеуказанные работы, однако, мне нужно, чтобы иметь возможность запросить возврат благотворительным фильтр по шарнирной области «company_id». Попробуйте charities.where ({company_id: 1}). Fetch(), приводит к исключению, которое говорит, что не является функцией благотворительных организаций.

Найдено решение

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

Может кто-то объяснить разницу между этим и с помощью .where({company_id: req.query.companyid})

ответ

0

Ну, используя .where({company_id: req.query.companyid}) вы в основном ограничивая себя «это - равно - что». Если вы используете query, вы можете достичь гораздо большего, например. .query('where', 'age', '>', 10)

Кроме того, вы можете использовать query немного иначе, и вы можете использовать конструктор запросов knex. Например .:

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

Таким образом, вы можете получить доступ ко всему в основном knex.js предложения: http://knexjs.org/