typeorm关联查询某个数据项的total应该怎么写?

作者站长头像
站长
· 阅读数 4
const user = this.userRepository
      .createQueryBuilder('user')
      .leftJoin('user.tel', 'tel')
      .addSelect('COUNT(DISTINCT tel.id)', 'totalTel')
      .groupBy('user.id')
      .getOne();
    return user;

一个user有多个tel,是一对多的关系,现在我需要查询某个user,并且关联出tel的数量,上面的写法,user没有totalTel字段。

{
    id:1,
    userName: 'aaa'
}

而改成getRawOne就有totalTel字段,但是其他字段都是数据库定义的下划线,而非驼峰的形式。

{
    id:1,
    user_name: 'aaa',
    totalTel: 1,
}

getOne应该怎么增加totalTel字段。

回复
1个回答
avatar
test
2024-06-25
async findOneWithTelCount(userId: number): Promise<any> {
  const rawData = await this.userRepository
    .createQueryBuilder('user')
    .leftJoin('user.tel', 'tel')
    .select([
      'user.id AS id',
      'user.userName AS userName',
      'COUNT(DISTINCT tel.id) AS totalTel'
    ])
    .where('user.id = :userId', { userId })  // 如果你有过滤条件,比如获取特定的 user
    .groupBy('user.id')
    .getRawOne();

  if (!rawData) return null;

  return {
    id: rawData.id,
    userName: rawData.userName,
    totalTel: +rawData.totalTel
  };
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容