2017-10-16 5 views
0

Betrachtet man das Modell unten, muss ich alle TaskLists mit ihrer TaskListItems (1-N) und die letzte mit ihren entsprechenden Vehicle (N-1, a Fahrzeug kann eine oder mehrere TaskListItems haben, aber eine TaskListItem kann nicht ohne ein Fahrzeug existieren).Zurück Kind einer Kind bezogenen Tabelle (TaskList> TaskListItem> Fahrzeug)

Tasklist

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

Fahrzeug

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

Ich habe in der Lage gewesen, alle TaskLists mit seinen TaskListItems zurückzukehren, aber ich weiß nicht, wie man hinzufügen eine dritte Ebene zum Ergebnis.

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

Wie kann ich die TaskLists zurückkehren, ihre TaskListItems entlang jeder mit Vehicle eines TaskListItem?

Antwort

0

Nur die Antwort gefunden. Ich bin für den Fall, jemand teilen sonst jemals braucht dies:

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

Die Lösung ein neues Element in der withRelated Array hinzuzufügen ist, indem er auf das Kind-Modell (vehicle) eines anderen Kindes Modell.