TypeOrm - NestJS 使用 queryBuilder
Posted
技术标签:
【中文标题】TypeOrm - NestJS 使用 queryBuilder【英文标题】:TypeOrm - NestJS using queryBuilder 【发布时间】:2021-04-28 10:02:47 【问题描述】:我在 mysql 中有这个 db 架构:
users_tbl
--------------------------------------------
id | first_name | last_name
--------------------------------------------
1 | Jon | Doe
2 | Mark | Smith
address_tbl
------------------------------------------------------------
id | address | city | user_id
------------------------------------------------------------
1 | some address | some city | 1
然后,我想使用 TypeOrm 的 queryBuilder 来获取 Jon Doe 的地址。
我的原始 sql 查询:
SELECT users.first_name, users.last_name, address.address, address.city FROM users INNER JOIN address ON address.user_id=users.id
我的 TypeOrm 查询构建器:
const users = await this.userRepo
.createQueryBuilder('users')
.select('users.first_name', 'fName')
.addSelect('users.last_name', 'lName')
.addSelect('adr.address', 'address')
.addSelect('adr.city', 'city')
.innerJoin('address', 'adr', 'adr.user_id=users.id')
.getMany();
return users;
似乎没有任何错误,因为我能够运行GET
请求。但是,它返回一个空对象。在我的控制台中,NestJS(或 TypeORM)记录了生成的 mysql 查询。这里是:
SELECT adr.city AS city, adr.country AS country, adr.id AS adr_id, users.first_name AS fName, users.last_name AS lName FROM users users INNER JOIN address adr ON adr.user_id = users.id
我复制并粘贴它以在 phpmyadmin 中执行手动查询。查询似乎有效,并给了我预期的输出。我的代码中是否缺少某些内容,或者这是某种 TypeORM 限制?
【问题讨论】:
你能分享你的控制器方法吗? 【参考方案1】:如下尝试使用getRawMany
而不是getMany
-
return await this.userRepo
.createQueryBuilder('users')
.select('users.first_name', 'fName')
.addSelect('users.last_name', 'lName')
.addSelect('adr.address', 'address')
.addSelect('adr.city', 'city')
.innerJoin('address', 'adr', 'adr.user_id=users.id')
.printSql()
.getRawMany();
【讨论】:
以上是关于TypeOrm - NestJS 使用 queryBuilder的主要内容,如果未能解决你的问题,请参考以下文章
TypeOrm - NestJS 使用 queryBuilder
TypeError:存储库方法不是函数(NestJS / TypeORM)
使用 NestJS、TypeORM、GraphQL 更新具有实体之间关系的 PSQL 表