2015-11-24 18 views
13

Mam bazę danych MySQL, której potrzebuję do zapytania z node.jsJak zapętlić wiersze po .fetchAll Bookshelf js + knex js?

Używam do tego półki na książki i knex.

Chcę uzyskać zawartość tabeli - Zdefiniowałem tabelę w pliku model.js. Próbuję kwerendy w ten sposób:

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

Chciałbym wiedzieć, w jaki sposób pętli nad resData, ponieważ powinien być wiele wierszy.

Dane wyjściowe konsoli wyglądają następująco: Nie widzę listy wierszy, przez które mogę przechodzić. Czego mi brakuje?

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 } 

Odpowiedz

19

Znalazłem odpowiedź (dokumentacja jest bardzo tajemniczy, nadzieję, że to pomaga innym)

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 Spojrzałem całej dokumentacji i nie mógł znajdę jak to zrobić prostą rzecz – Jonah

+0

dokładnie moje myśli, kiedy szukałem tego ... –

+0

Jak dla mnie znalazłem, że result.lenght nie jest równy result.models.length ((( –

3

Klasa Collection posiada zestaw metod lodash dla tego produktu.

collection.forEach można używać w ten sposób:

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

Zapoznaj się z docs, istnieje wiele innych przydatnych metod Collection.

1

Jeśli nie chcesz używać lodash, można to zrobić:

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()) 
    }) 

wyjście jest w formacie JSON

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

+1

To powinna być zaakceptowana odpowiedź. Prosty i bezpośredni. –

+0

Jesteś prawdziwym MVP @RalleSaid –