ObjectionJs 获取具有多对多关系的实体
Posted
技术标签:
【中文标题】ObjectionJs 获取具有多对多关系的实体【英文标题】:ObjectionJs fetch entity with many to many relationship 【发布时间】:2021-12-28 19:09:57 【问题描述】:我正在使用 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 个权威反对意见,但他们只是没有“出现”并且权威数组仍然未定义......
【问题讨论】:
【参考方案1】:查询时可以使用withGraphFetched
await User
.query()
.withGraphFetched('[authorities]')
.findById(id)
.throwIfNotFound(message: "User not found.")
.then(async user=> ...)
【讨论】:
感谢您的回复。您的要求效果很好,我也尝试使用“withGraphJoined”,它也有效。以上是关于ObjectionJs 获取具有多对多关系的实体的主要内容,如果未能解决你的问题,请参考以下文章