2015-11-24 7 views
13

Ich habe eine MySQL-Datenbank, die ich von node.jsWie Schleife über Zeilen nach .fetchAll Bookshelf js + knex js?

abfragen muss Ich verwende Bücherregal und Knex für diese.

Ich möchte den Inhalt einer Tabelle abrufen - ich habe eine Tabelle in meiner Datei model.js definiert. Ich bin versucht, die Abfrage wie folgt aus:

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

Ich würde gerne wissen, wie über resData Schleife, weil es mehrere Zeilen sein sollte.

Die Ausgabe der Konsole sieht so aus: Ich sehe keine Liste von Zeilen, die ich überschleifen kann. Was fehlt mir?

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 } 

Antwort

19

fand ich die Antwort (die Dokumentation sehr kryptisch ist, hoffen, dass diese anderen hilft)

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 ich überall auf der Dokumentation geschaut und konnte es nicht Finde, wie man diese einfache Sache macht – Jonah

+0

genau meine Gedanken, als ich danach suchte ... –

+0

Für mich fand ich, dass result.length ist nicht gleich result.models.length ((( –

3

Die Collection Klasse einen Satz von lodash Methoden für diese hat.

können Sie collection.forEach auf diese Weise verwenden:

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

Schauen Sie sich die docs, gibt es viele andere nützliche Methoden für Collection.

1

Wenn Sie nicht wollen, lodash verwenden möchten, können Sie dies tun:

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

Ausgang ist im JSON-Format

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

+1

Dies sollte die akzeptierte Antwort sein. Einfach und direkt. –

+0

Sie sind der echte MVP @RalleSaid –