乐闻世界logo
搜索文章和话题

How to apply where-criteria to the same field more than once in TypeORM?

4 个月前提问
3 个月前修改
浏览次数49

1个答案

1

在TypeORM中,您可以通过多种方式将多个where条件应用于同一字段,这主要取决于查询是通过QueryBuilder构建还是使用Repository API。以下是两种常见的方法:

使用QueryBuilder

使用QueryBuilder时,可以链式调用多个whereandWhere语句来对同一字段增加多个条件。例如,如果您想要查询一个名为User的实体,根据年龄过滤多个不同的范围,可以这样做:

typescript
const users = await connection .getRepository(User) .createQueryBuilder("user") .where("user.age > :minAge", { minAge: 18 }) .andWhere("user.age < :maxAge", { maxAge: 30 }) .getMany();

在这个例子中,我们首先使用where方法定义了年龄必须大于18,然后使用andWhere方法添加了年龄必须小于30的条件。

使用Repository API

在使用Repository API时可以构建一个包含多个条件的对象。例如,你想要查找所有名为"John"且年龄在20到30岁之间的用户,你可以这样构建查询:

typescript
const users = await userRepository.find({ where: [ { name: 'John', age: MoreThan(20) }, { name: 'John', age: LessThan(30) } ] });

这个查询将返回所有名为"John",年龄大于20岁且小于30岁的用户。

使用原生SQL

如果你需要更复杂的查询或者需要使用特定的SQL语句,你可以使用原生SQL:

typescript
const users = await connection .getRepository(User) .createQueryBuilder("user") .where("user.name = :name AND user.age > :minAge AND user.age < :maxAge", { name: "John", minAge: 20, maxAge: 30 }) .getMany();

在这个例子中,我们在一个where方法中定义了所有的条件,并使用了命名参数来避免SQL注入风险。

请注意,在构造这些查询时,要考虑到SQL注入的风险,并确保使用TypeORM提供的参数替换特性来避免直接将用户输入拼接到SQL语句中。此外,这些例子中用到的方法(如MoreThanLessThan)是TypeORM提供的特定功能,可以更方便地构建比较查询。

2024年6月29日 12:07 回复

你的答案