2017-03-20 24 views
0

モデル項目を関連項目でフェッチする既存のクエリを修正して、検索用語が提供されるかIDが提供されるかによって動的にwhere句を変更する必要があります。ノードknex Bookshelf - フェッチで動的where句を使用する

Iから以下の元を変更する場合:。これに

return db.model('Users').where('id', userId) 
     .fetch({withRelated: [ 
     'userNames.userMessages', 
     { 
      ... 
     }, 
     ]}).then(function(user) { 

、私はエラーdb.model(...)を取得フェッチは関数ではありません

var query = db.model('Users') 
     .fetch({withRelated: [ 
     'userNames.userMessages', 
     { 
      ... 
     }, 
     ]}); 

    if (userId) { 
     query.where('id', userId); 
    } else if (searchTerm) { 
     query.where('name', 'like', '%' + searchTerm + '%'); 
    } 

    query.then(function(user) { 

答えて

2

fetch()が必要ですa model instancenewforge()またはその他のクエリの結果によって作成されます。 db.model('Users')だけが「クラス」のようになり、Model static methodsしか利用できません。

だからあなたの動的なクエリのための1つの可能な解決策は次のようになります。

var query = db.model('Users') 
    .collection() 
    .query(function(qb) { 
    if (userId) { 
     qb.where('id', userId); 
    } else if (searchTerm) { 
     qb.where('name', 'like', '%' + searchTerm + '%'); 
    } 
    }) 
    .fetch({withRelated: [ 
    'userNames.userMessages', 
    { 
     ... 
    }, 
    ]}); 

query.then(function(user) { 
関連する問題