ObjectionJs 获取具有多对多关系的实体

ObjectionJs fetch entity with many to many relationship

我正在使用 knex-objection。 我有一个包含 3 个表的简单示例: user, authority_user, authority 其中“user”和“authority”以多对多的关系连接在一起。

关系代码:

static get relationMappings() {

    return {
        authorities: {
            relation: Model.ManyToManyRelation,
            modelClass: path.join(__dirname, 'Authority'),

            join: {
                from: 'user.id',
                through:{
                    from: 'user_authority.user_id',
                    to: 'user_authority.authority_id'
                },
                to: 'authority.id'
            }
        }
    }
}

关系正常,我插入了一个具有一个权限的用户并检查了它。 问题是急切地加载用户及其权限 returns 一个 未定义的权限数组 如下所示:

  User {
id: 2,
username: 'someuser',
email: 'someuser@gmail.com',
password: 'b$DztbTKBMsElxH0kk9nK8x.73bgl3W.rZnhzqFH5XRR2FSkYcROzm2',
is_active: 1,
created_at: '2021-12-28 18:10:30',
updated_at: '2021-12-28 18:10:30',
authorities: [ [Authority] ]

} ]

这里的 authorities 数组是未定义的,而我可以清楚地获取关系并获得我的用户权限:等待 User.relatedQuery('authorities').for(2) 给出:

  sql: 'select `authority`.* from `authority` inner join `user_authority` on `authority`.`id` = `user_authority`.`authority_id` where `user_authority`.`user_id` in (?)'

结果:[权限{id:1,名称:'ROLE_USER'}]

编辑: 我试图获取具有 2 个权限的用户,这是输出:

User {
id: 3,
username: 'test',
email: 'test@gmail.com',
password: 'bGWQd5b2.JwIvtyyOi/0zOKogY7kOG2aJhUqdFhlYpFvisPgeI62u',
is_active: 1,
created_at: '2021-12-29 08:42:50',
updated_at: '2021-12-29 08:42:50',
authorities: [ [Authority], [Authority] ]

}

似乎 ObjectionJs“知道”2 个 Authority 反对意见,但它们只是不“出现”并且 authorities 数组仍未定义...

查询时可以使用withGraphFetched

await User
.query()
.withGraphFetched('[authorities]')
.findById(id)
.throwIfNotFound({message: "User not found."})
.then(async user=> { ...})