2015-08-25 8 views
8

BookshelfJS zu verwenden, hat das folgende Beispiel für die Verwendung von 'query':Bücherregal.JS | Wie, wo und orWhere in Abfrage

var whereObj = { 
    'key1':'value1', 
    'key2':'value2' 
}; 

model 
    .query({where: whereObj, orWhere: {key: 'value'}}) 
    .fetch() 
    .then(function(model) { 
    ... 
    }); 

Antwort

8

Sie haben zwei Möglichkeiten:

model 
    .query({where: {other_id: '5'}, orWhere: {key: 'value'}}) 
    .fetch() 
    .then(function(model) { 
    ... 
    }); 

Ist es in Ordnung, Folgendes zu tun

Verwenden Sie einen Rückruf

.query(function (qb) { 
    qb.where(other_id, '5') 
    .orWhere('key', 'value'} 
); 

Verwenden Sie ein Objekt

.query({where: {other_id: '5'}, orWhere: {key: 'value'}}) 
+0

Also mit .orWhere() statt .where() beginnen? Klingt nicht intuitiv. :(Fühlt sich so an, als müsste es umgekehrt sein. – esanz91

+1

Oh, sorry. Das war ein Fehler im Callback Beispiel - fang mit 'where' an.' OderWobei 'defaultly 'wo ist, wenn es die erste' * where' Anweisung ist . –

7

Für komplexere Abfragen können Sie verwenden:

.query(function(qb) { 
        qb.select('*'); 
        qb.where(function() { 
         this.where('attr1', 1); 
         this.where('attr2','in' , [1,2,3]); 
        }); 
        qb.orWhere(function() { 
         this.where('attr1', 2); 
         this.where('attr2','in' , [4,5,6]); 
        }); 
       }) 
0

Schauen Sie sich die bookshelf-eloquent Erweiterung, die auf dem Bücherregal Modell direkt viele der Knex.js Funktionen aussetzt . Ihr Code würde zu etwas wie diesem vereinfacht: