2015-11-24 12 views
13

Tôi có một Cơ sở dữ liệu MySQL mà tôi cần truy vấn từ node.jsCách lặp qua các hàng sau .fetchAll Bookshelf js + knex js?

Tôi đang sử dụng giá sách và knex cho việc này.

Tôi muốn lấy nội dung của bảng - Tôi đã xác định bảng trong tệp model.js của mình. Tôi đang thử truy vấn như thế này:

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

Tôi muốn biết cách lặp qua resData vì nó phải là nhiều hàng.

Đầu ra của bảng điều khiển trông giống như sau: Tôi không thấy danh sách các hàng tôi có thể lặp lại .. Tôi đang thiếu gì?

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 } 

Trả lời

19

Tôi tìm thấy câu trả lời (tài liệu là rất khó hiểu, hy vọng điều này sẽ giúp những người khác)

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 Tôi nhìn qua tất cả các tài liệu và có thể không tìm cách làm điều đơn giản này – Jonah

+0

chính xác suy nghĩ của tôi khi tôi tìm kiếm nó ... –

+0

Đối với tôi, tôi thấy rằng result.lenght không bằng result.models.length ((( –

3

Lớp Collection có một tập hợp các phương pháp lodash cho việc này.

Bạn có thể sử dụng collection.forEach theo cách này:

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

Kiểm tra các docs, có nhiều phương pháp hữu ích khác cho Collection.

1

Nếu bạn không muốn sử dụng lodash, bạn có thể làm điều này:

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

ra là ở định dạng json

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

+1

Đây phải là câu trả lời được chấp nhận. Đơn giản và trực tiếp. –

+0

Bạn thực sự là MVP @RalleSaid –

Các vấn đề liên quan