You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:27:03