web-dev-qa-db-fra.com

Comment faire une boucle sur les lignes après .fetchAll Bookshelf js + knex js?

J'ai une base de données MySQL que je dois interroger de node.js 

J'utilise bookshelf et knex pour cela.

Je veux obtenir le contenu d'une table - j'ai défini une table dans mon fichier model.js. Je tente la requête comme ceci:

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

Je voudrais savoir comment boucler resData car il devrait y avoir plusieurs lignes.

La sortie de la console ressemble à ceci: Je ne vois pas une liste de lignes sur lesquelles je peux faire une boucle.

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 }
17
A.D

J'ai trouvé la réponse (la documentation est très cryptée, espérons que cela aidera les autres)

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

    })
20
A.D
Model.CompletedSentences.fetchAll().then(function (resData) {
        console.log(resData.serialize())
    })

la sortie est au format json

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

11
RalleSaid

La classe Collection dispose d'un ensemble de méthodes lodash pour cela.

Vous pouvez utiliser collection.forEach de cette façon:

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

Consultez les docs , il existe de nombreuses autres méthodes utiles pour Collection.

5
pietrovismara

Si vous ne voulez pas utiliser lodash, vous pouvez faire ceci:

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

})
2
Salar

il suffit simplement de console avec ses attributs.

console.log(resData.attributes);

vous obtiendrez des résultats étau objets.

0
Chaudhary