2017-03-20 1 views
0

Ich muss eine vorhandene Abfrage ändern, die Modellinstanzen mit verwandten Elementen abruft, um die where-Klausel dynamisch zu ändern, abhängig davon, ob ein Suchbegriff angegeben oder eine ID angegeben wird.Node Knex Bookshelf - Verwenden der dynamischen Where-Klausel mit Fetch

Wenn ich das Original unten aus ändern:

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

Um dies zu, erhalte ich Fehler db.Model (...) holen ist keine Funktion

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

Antwort

2

fetch() erfordert. a model instance, erstellt von new, forge() oder ein Ergebnis einer anderen Abfrage. db.model('Users') allein ist wie eine "Klasse", nur die Model static methods verfügbar.

So eine mögliche Lösung für Ihre dynamische Abfrage könnte sein:

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) { 
Verwandte Themen