2015-11-24 28 views
13

Ho un database MySQL che ho bisogno di interrogare da node.jsCome eseguire il looping delle righe dopo .fetchAll Bookshelf js + knex js?

Sto usando librerie e knex per questo.

voglio ottenere il contenuto di una tabella - ho definito una tabella nel mio file model.js. Sto tentando la query come questa:

//select * from completedSentences; 
Model.CompletedSentences.fetchAll().then(function (resData) { 
     console.log(resData) 
    }) 

Vorrei sapere come un ciclo su resData perché dovrebbe essere più righe.

L'uscita della console si presenta così: non vedo un elenco di righe posso ciclo su .. Cosa mi manca?

CollectionBase { 
    model: 
    { [Function] 
    NotFoundError: [Function: ErrorCtor], 
    NoRowsUpdatedError: [Function: ErrorCtor], 
    NoRowsDeletedError: [Function: ErrorCtor] }, 
    length: 1, 
    models: 
    [ ModelBase { 
     attributes: [Object], 
     _previousAttributes: [Object], 
     changed: {}, 
     relations: {}, 
     cid: 'c4', 
     id: 1 } ], 
    _byId: 
    { '1': 
     ModelBase { 
     attributes: [Object], 
     _previousAttributes: [Object], 
     changed: {}, 
     relations: {}, 
     cid: 'c4', 
     id: 1 }, 
    c4: 
     ModelBase { 
     attributes: [Object], 
     _previousAttributes: [Object], 
     changed: {}, 
     relations: {}, 
     cid: 'c4', 
     id: 1 } }, 
    _knex: null, 
    _events: {}, 
    _eventsCount: 0 } 

risposta

19

ho trovato la risposta (la documentazione è molto criptico, spero che questo aiuta gli altri)

new Model.CompletedSentences().fetchAll().then(function (resData) { 
     _.each(resData.models, function (model) { //I am looping over models using underscore, you can use any loop 
      console.log(model.attributes) 
     }) 

    }) 
+0

Wow ho guardato tutto la documentazione e non poteva trovare come fare questa cosa semplice – Jonah

+0

esattamente i miei pensieri quando l'ho cercato ... –

+0

Per quanto riguarda me, ho trovato che result.lenght non è uguale result.models.length ((( –

3

La classe Collection ha una serie di metodi lodash per questo.

È possibile utilizzare collection.forEach questo modo:

new Model.CompletedSentences().fetchAll().then(function (completedSentences) { 
     completedSentences.forEach(function (model) { 
      console.log(model.attributes) 
     })  
    }) 

Scopri i docs, ci sono molti altri metodi utili per Collection.

1

Se non volete usare lodash, si può fare questo:

new Model.CompletedSentences().fetchAll().then(function (resData) { 
    resData.models.forEach(function (model) { 
     console.log(model.get('attribute'); 
     console.log(model.related('sth').get('attribute'); 
    }) 

}) 
4
Model.CompletedSentences.fetchAll().then(function (resData) { 
     console.log(resData.serialize()) 
    }) 

output è in formato JSON

http://bookshelfjs.org/#Model-instance-serialize

+1

Questa dovrebbe essere la risposta accettata. Semplice e diretto. –

+0

Sei il vero MVP @RalleSaid –