如何在 typeorm querybuilder 中显示原始 SQL

Hei*_*erg 0 sql typeorm

我开发了typeorm querybuilder。为了调试的目的,我想展示sql。

我测试了printSql()方法。但它没有显示任何 SQL。

      const Result = await this.attendanceRepository
      .createQueryBuilder("attendance")
      .innerJoin("attendance.child", "child")
      .select(["attendance.childId","child.class","CONCAT(child.firstName, child.lastName)"])
      .where("attendance.id= :id", { id: id})
      .printSql()
      .getOne()
      console.log(Result);
Run Code Online (Sandbox Code Playgroud)

它回来了。

Attendance { childId: 4, child: Child { class: 'S' } }
Run Code Online (Sandbox Code Playgroud)

我想要的结果是得到 SQL

有什么不对的地方吗?有没有什么好的方法来获取 sql ?

如果有人有意见,请告诉我。

谢谢

iAv*_*tor 10

printSql也可以使用,但只有logging启用时才会打印。


@Module({
  imports: [
    TypeOrmModule.forRoot({
      ...options
      logging: true
    }),
  ],
})

await this.attendanceRepository
    .createQueryBuilder("attendance")
    .innerJoin("attendance.child", "child")
    .select(["attendance.childId","child.class","CONCAT(child.firstName, child.lastName)"])
    .where("attendance.id= :id", { id: id })
    .printSql();
Run Code Online (Sandbox Code Playgroud)


Art*_*sky 8

.getQuery() 或者 .getSql()


const sql1 = await this.attendanceRepository
      .createQueryBuilder("attendance")
      .innerJoin("attendance.child", "child")
      .select(["attendance.childId","child.class","CONCAT(child.firstName, child.lastName)"])
      .where("attendance.id= :id", { id: id})
      .getQuery();
      console.log(sql1);
Run Code Online (Sandbox Code Playgroud)
const sql2 = await this.attendanceRepository
      .createQueryBuilder("attendance")
      .innerJoin("attendance.child", "child")
      .select(["attendance.childId","child.class","CONCAT(child.firstName, child.lastName)"])
      .where("attendance.id= :id", { id: id})
      .getSql();
      console.log(sql2);
Run Code Online (Sandbox Code Playgroud)

  • 那么像“repo.find()”这样的其他函数呢? (5认同)
  • @MuhammadAwais 对于那些没有给定方法来检索生成的 SQL 的人,如果只是出于调试目的,您可以在数据源选项中启用“logging: true”,这将记录对数据库进行的任何查询 (3认同)