如何使用TypeORM Query Builder查询一对多转多对多关联获取用户待办
基于TypeORM QueryBuilder的实现方案
你可以在现有分类查待办的逻辑基础上,新增一层分类到用户的关联,再按用户ID过滤即可,注意要加去重逻辑避免重复数据:
const targetUserId = "传入的查询用户ID"; const response = await getRepository(TodoItem) .createQueryBuilder("todoItem") .leftJoin('todoItem.categories', 'categories') // 关联分类对应的用户实体,此处关联字段要和你实体里定义的关联属性名一致 .leftJoin('categories.user', 'user') // 按目标用户ID过滤 .where('user.user_id = :targetUserId', { targetUserId }) // 去重:避免同一个待办归属该用户多个分类时重复返回 .distinct(true) .getMany();
适配不同实体定义的替代写法
如果你没有在Category实体中定义和User的关联属性,也可以直接关联Users表手动指定关联条件:
const targetUserId = "传入的查询用户ID"; const response = await getRepository(TodoItem) .createQueryBuilder("todoItem") .leftJoin('todoItem.categories', 'categories') // 直接关联Users表,手动指定外键关联规则 .leftJoin(Users, 'user', 'user.user_id = categories.user_id') .where('user.user_id = :targetUserId', { targetUserId }) .distinct(true) .getMany();
注意:如果需要同时返回关联的分类、用户信息,可自行添加addSelect方法指定要返回的关联字段即可。
内容的提问来源于stack exchange,提问作者Kai021195
相关产品推荐
相关产品推荐

