2016-04-24 14 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」のピボットフィールドでフィルタする返された慈善団体に照会できるようにする必要があります。 charries.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})を使用して、そのとまあ.where({company_id: req.query.companyid})

答えて

0

を使用しての違いを説明することができます。 queryを使用すると、さらに多くの成果を上げることができます。 .query('where', 'age', '>', 10)

さらに、queryを少し使い分けて、knexクエリビルダを利用することもできます。 http://knexjs.org/

:例えば:

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

あなたは基本的にすべてのものにアクセスすることができますこの方法は、オファーをknex.js

関連する問題