2017-10-16 1 views
0

以下のモデルを考慮して、TaskListsTaskListItems(1-N)、最後をそれぞれVehicle(N-1、a車両は1つまたは複数の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を返すことができましたが、私は追加する方法がわかりません結果の第3レベル。

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

私は返すことができますどのように彼らのTaskListItemsTaskListItemの各VehicleとともにTaskLists、?

答えて

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'); 
        } 
       }] 
      }) 

ソリューションは、別の子モデルの子モデル(vehicle)を指し、withRelated配列に新しい項目を追加することです。

関連する問題