首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回子相关表的子表(TaskList > TaskListItem > Vehicle)

返回子相关表的子表(TaskList > TaskListItem > Vehicle)
EN

Stack Overflow用户
提问于 2017-10-16 20:01:04
回答 1查看 41关注 0票数 0

考虑到下面的模型,我需要返回所有的TaskLists和它们的TaskListItems (1-N),并返回最后一个和它各自的Vehicle (N-1,车辆可以有一个或多个TaskListItems,但TaskListItem不能没有车辆存在)。

TaskList

代码语言:javascript
复制
let bookshelf = require('./base');

var TaskList,
    TaskLists;

TaskList = bookshelf.Model.extend({
    tableName: 'tasklists',
    createdByUser: function () {
        return this.belongsTo('User', 'createdBy');
    },
    resources: function() {
        return this.belongsToMany('User', 'tasklist_resources', 'tasklistId', 'userId', 'id');
    },
    items: function() {
        return this.hasMany('TaskListItem', 'tasklistId');
    },
    status: function () {
        return this.belongsTo('StatusTaskList', 'statusId');
    }
});

TaskLists = bookshelf.Collection.extend({
    model: TaskList
});

module.exports = {
    TaskList: bookshelf.model('TaskList', TaskList),
    TaskLists: bookshelf.collection('TaskLists', TaskLists)
};

TaskListItem

代码语言:javascript
复制
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)
};

车辆

代码语言:javascript
复制
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,但是我不知道如何在结果中添加第三层。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2017-10-17 00:22:13

找到答案了。我在此分享,以防其他人需要这个:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46769837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档