TypeORM - 在原始sql中的Order By不使用参数

问题描述 投票:0回答:1

我正在使用entityManager和原始查询从Postgres数据库中获取数据。我有item_id对select和order的简单查询。如果我将完整查询写为:

let query = "Select * From item ... Order By item_id";并将其传递给entityManager await this.entityManager.query(query) order by正常工作。

但是,如果我用参数写查询:

let query = "Select * From item ... Order By $1";和传递columnName用于对entityManager await this.entityManager.query(query,["item_id"]) order by的排序完全被忽略。

我也尝试将columN name命名为property并将该属性传递给entityManager:qazxsw poi,但结果相同。

我们有PostgreSql作为数据库和typeorm版本^ 0.2.9

有谁知道,问题出在哪里?或者是否有任何workarround在原始sql中使用order by with parametr?

提前致谢。

javascript node.js typescript nestjs typeorm
1个回答
0
投票

postgresql中的let columnName = "item_id"; await this.entityManager.query(query,[columnName])子句不支持预准备语句。这是因为参数是值而不是标识符。

作为一种解决方法,你可以在typescript中使用字符串插值,但最安全的方法就像在函数中包装SQL语句并将ORDER BYformat所描述的预处理语句结合使用。

© www.soinside.com 2019 - 2024. All rights reserved.