TypeORM queryBuilder 中的可选参数
Posted
技术标签:
【中文标题】TypeORM queryBuilder 中的可选参数【英文标题】:Optional parameter in TypeORM queryBuilder 【发布时间】:2020-10-24 04:21:45 【问题描述】:createQueryBuilder
中是否可以使用可选参数?
例如,我有这个代码:
let users = await this.conn
.getRepository(UserEntity)
.createQueryBuilder("user")
.where("user.firstName LIKE :search", search: dto.search )
.getMany();
我的可选参数是search
,我只想在dto.search
不为空时启动子句.where
,但当他为空时应该跳过这个函数(where
)并转到getMany
。
有人知道怎么做吗?
【问题讨论】:
【参考方案1】:const query = this.conn
.getRepository(UserEntity)
.createQueryBuilder("user");
// Optionally add where condition
if(dto.search)
query.where("user.firstName LIKE :search", search: dto.search )
// run query
let users = await query.getMany();
请注意会导致 if 语句出错的虚假值。
【讨论】:
【参考方案2】:试试这个:
let users = await this.conn.getRepository(UserEntity)
.createQueryBuilder('user')
.where(search !== null
? 'user.firstName LIKE :search'
: 'TRUE', search: dto.search )
.getMany();
或者不使用where TRUE
的另一种方法是:
let users = this.conn.getRepository(UserEntity)
.createQueryBuilder('user');
users = search !== null
? users.where('user.firstName LIKE :search', search: dto.search )
: users
users = await users.getMany();
【讨论】:
小心这部分search !== null
。它不会考虑 dto.search 未定义或具有零长度字符串值的情况。这可能会导致查询结果不准确。以上是关于TypeORM queryBuilder 中的可选参数的主要内容,如果未能解决你的问题,请参考以下文章
在 TypeORM 中使用 QueryBuilder 与 Repository 都有哪些不同的用例? [关闭]