2017-10-16 80 views
0

考慮到以下模型,我需要返回所有TaskLists及其TaskListItems(1-N),最後一個與其各自的Vehicle(N-1,a車輛可以有一個或多個TaskListItems,但如果沒有車輛,則不會存在TaskListItem)。返回兒童相關表(TaskList> TaskListItem> Vehicle)

任務列表

TaskListItem

let bookshelf = require('./base'); 

var TaskListItem, 
    TaskListItems; 

TaskListItem = bookshelf.Model.extend({ 
    tableName: 'tasklist_items', 
    createdByUser: function() { 
     return this.belongsTo('User', 'createdBy'); 
    }, 
    vehicle: function() { 
     return this.belongsTo('Vehicle', 'vehicleId').through('VehicleAnomaly', 'vehicleAnomalyId', 'vehicleId', 'id'); 
    } 
}); 

TaskListItems = bookshelf.Collection.extend({ 
    model: TaskListItem 
}); 

module.exports = { 
    TaskListItem: bookshelf.model('TaskListItem', TaskListItem), 
    TaskListItems: bookshelf.collection('TaskListItems', TaskListItems) 
}; 

車輛

let bookshelf = require('./base'); 

var Vehicle, 
    Vehicles; 

Vehicle = bookshelf.Model.extend({ 
    tableName: 'vehicles' 
}); 

Vehicles = bookshelf.Collection.extend({ 
    model: Vehicle 
}); 

module.exports = { 
    Vehicle: bookshelf.model('Vehicle', Vehicle), 
    Vehicles: bookshelf.collection('Vehicles', Vehicles) 
}; 

我已經能夠憑藉其TaskListItems返回所有TaskLists,但我不知道怎麼加結果的第三個層次。

new TaskList() 
      .query(qb => { 
       qb.join('tasklist_items', 'tasklists.id', '=', 'tasklist_items.tasklistId'); 
       qb.where('tasklist_items.statusId', '=', 1); 
      }) 
      .fetchAll({ 
       withRelated: [ { 
        'items': function(qb) { 
         qb.where('statusId', '=', 1); 
        } 
       }] 
      }) 

我怎樣才能返回TaskLists,他們TaskListItems連同TaskListItem的每個Vehicle

回答

0

剛剛找到答案。我萬一別人分享過這個需要:

new TaskList() 
      .query(qb => { 
       qb.join('tasklist_items', 'tasklists.id', '=', 'tasklist_items.tasklistId'); 
       qb.where('tasklist_items.statusId', '=', 1); 
      }) 
      .fetchAll({ 
       withRelated: [ { 
        'items': function(qb) { 
         qb.where('statusId', '=', 1); 
        }, 
        'items.vehicle': function(qb) { 
         qb.orderBy('location', 'ASC'); 
        } 
       }] 
      }) 

的解決方案是將withRelated陣列中添加新項,指向另一個子模型的子模型(vehicle)。