【问题标题】:Return inserted id with TypeORM & NestJS raw query: await connection.manager.query(`INSERT INTO使用 TypeORM 和 NestJS 原始查询返回插入的 id:await connection.manager.query(`INSERT INTO
【发布时间】:2021-06-25 21:00:20
【问题描述】:

我希望使用 TypeORM 和 NestJS 的原始查询返回 id 或更好的所有插入信息。示例如下:

await connection.manager.query(`INSERT INTO...`)

将查询分配给一个常量并在控制台记录它时,它不会产生任何有用的信息:

OkPacket {
    fieldCount: 0,
    affectedRows: 1,
    insertId: 0,
    serverStatus: 2,
    warningCount: 1,
    message: '',
    protocol41: true,
    changedRows: 0
}

如您所见,它没有返回任何相关信息,上面的insertId显然是不正确的,并且每次都返回这个,而不管查询的实际参数如何。

我知道您可以使用更典型的 TypeORM 查询.return(['name_of_column_you_want_returned']).execute() 它会很好地返回相关信息。有没有办法用原始查询来做到这一点?谢谢!

【问题讨论】:

    标签: sql typescript mariadb nestjs typeorm


    【解决方案1】:

    tl;dr 您从 INSERT 命令获取原始 mariadb 驱动程序响应 (OkPacket),您需要一个新的 SELECT 查询来查看数据。


    您使用的是TypeORM EntityManager,文档没有提到返回值。 Looking at the source code for query,返回类型为any。由于它是一个原始查询,它可能会根据您使用的数据库类型而不是标准格式返回一个对象。

    在本例中,您使用的是 MariaDb,它返回了 OkPacket。这是文档: https://mariadb.com/kb/en/ok_packet/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-15
      • 2018-09-16
      • 2023-03-07
      • 2016-09-30
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      相关资源
      最近更新 更多