如何通过多个连接表连接对象

How to join objects through via multiple join tables

我有三个模型:EventGalleryImageImage 是基本模型,代表单个媒体。 Gallery 是用户提交的 Images 的集合。用户仅在 Gallery 级别与 Images 交互,因为他们当时以单数 Galleries 的形式创建、修改和删除 Images 组。 EventGalleries 的集合,它将内容与特定的现实世界事件相关联。

所以,我的关系如下:Event -> Event_Galleries -> Gallery -> Gallery_Images -> Image

我的问题是,通过 Bookshelf,有没有办法使用现有的连接表指定从 EventImage 的关系?它的功能如下:

Event -> Event_Galleries where Event_Galleries.event_id = Event.id -> Gallery_Image where Event_Galleries.gallery_id = Gallery_Image.gallery_id -> Image where Image.id = Gallery_Image.image_id

是的,您可以按照以下方式在 Bookshelf.js 模型中指定关系:

const Company = db.bookshelf.Model.extend({
    tableName: 'companys',
    hunters: function employees() {
        return this.hasMany(Employee, 'company_id');
    }
});

const Employee = db.bookshelf.Model.extend({
    tableName: 'employees',
    company: function company() {
        return this.belongsTo(Company);
    },
    addresses: function addresses() {
        return this.hasMany(EmployeeAddress);
    },
});

const EmployeeAddress = db.bookshelf.Model.extend({
    tableName: 'employees_addresses',
    employee: function employee() {
        return this.belongsTo(Employee);
    }
});

Company.where({ id: 42 }).fetch([ withRelated: 'employees', 'employees.addresses' ])
.then(result => {
    console.log(result);
}, error => {
    console.log(error);
})