1

我正在使用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'
            }
        }
    }
}

这种关系有效,我已经插入了一个具有一个权限的用户并检查了它。问题是急切地加载具有权限的用户会返回一个未定义的权限数组,如下所示:

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

}]

这里的权限数组是未定义的,而我可以清楚地获取关系并获取我的用户权限:await 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: '$2b$10$3GWQd5b2.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个权威反对意见,但他们只是没有“出现”并且权威数组仍然未定义......

4

1 回答 1

1

查询时可以使用withGraphFetched

await User
.query()
.withGraphFetched('[authorities]')
.findById(id)
.throwIfNotFound({message: "User not found."})
.then(async user=> { ...})
于 2022-01-09T07:44:26.867 回答