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

如何将指定SQL查询语句转换为TypeORM Query Builder代码

TypeORM Query Builder 转换代码

首先确认你已正确定义GameType、Draw两个实体,对应字段映射无误,以下是兼容TypeORM 0.2.x版本的写法:

import { getRepository } from 'typeorm';
// 替换为你项目中对应的实体路径
import { GameType } from './entities/GameType';
import { Draw } from './entities/Draw';

// 构造子查询对应SQL里的内层查询
const minDrawDateSubQuery = getRepository(Draw)
  .createQueryBuilder('draw')
  .select('draw.GameTypeID', 'GameID')
  .addSelect('MIN(draw.DrawDate)', 'DrawDate')
  .where('draw.DrawDate >= GETDATE()')
  .groupBy('draw.GameTypeID');

// 主查询关联子查询得到最终结果
const queryResult = await getRepository(GameType)
  .createQueryBuilder('gameType')
  .innerJoin(
    `(${minDrawDateSubQuery.getQuery()})`,
    'New',
    'New.GameID = gameType.GameTypeID'
  )
  // 必须传入子查询的参数,避免参数占位符匹配错误
  .setParameters(minDrawDateSubQuery.getParameters())
  .getRawMany();

如果你使用的是TypeORM 0.3.x及以上版本,getRepository已废弃,可改用DataSource实例实现:

import { DataSource } from 'typeorm';
import { GameType } from './entities/GameType';
import { Draw } from './entities/Draw';

// 假设你已经初始化过DataSource实例
const dataSource = new DataSource(/* 你的数据库配置 */);

const minDrawDateSubQuery = dataSource
  .getRepository(Draw)
  .createQueryBuilder('draw')
  .select('draw.GameTypeID', 'GameID')
  .addSelect('MIN(draw.DrawDate)', 'DrawDate')
  .where('draw.DrawDate >= GETDATE()')
  .groupBy('draw.GameTypeID');

const queryResult = await dataSource
  .getRepository(GameType)
  .createQueryBuilder('gameType')
  .innerJoin(
    `(${minDrawDateSubQuery.getQuery()})`,
    'New',
    'New.GameID = gameType.GameTypeID'
  )
  .setParameters(minDrawDateSubQuery.getParameters())
  .getRawMany();

补充说明

  • 原SQL中的GETDATE()是SQL Server的当前时间函数,如果你使用其他数据库可按需替换:
    • MySQL:替换为CURDATE()或NOW()
    • PostgreSQL:替换为CURRENT_DATE或NOW()
  • 如果你需要返回GameType实体实例而非原始查询结果,可以在主查询中添加.select('gameType.*')后调用getMany()即可。

内容的提问来源于stack exchange,提问作者Oleh Butsyk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:33:03