2015-08-25 14 views
8

BookshelfJS ha il seguente esempio per l'utilizzo di 'query':Bookshelf.JS | Come utilizzare dove e orWhere nella query

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

Va bene per fare quanto segue:

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

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

risposta

8

avete due opzioni:

utilizzare un callback

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

Utilizzare un oggetto

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

Quindi iniziare con. OWhere() anziché .where()? Non sembra intuitivo. :(Sembra che dovrebbe essere il contrario. – esanz91

+1

Oh, mi dispiace, questo è stato un errore nell'esempio di callback - inizia con 'where'.' OWhere' fa il default su 'where' se è la prima istruzione' * where' . –

7

Per le query più complesse, è possibile utilizzare questo:

.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

Scopri i bookshelf-eloquent estensione che espone molte delle funzioni Knex.js direttamente sul modello scaffale . Il tuo codice sarebbe semplificato per qualcosa di simile:

let result = await Model.where({other_id: 5}).orWhere('key', 'value').fetch();