在TypeORM中,您可以通过多种方式将多个where
条件应用于同一字段,这主要取决于查询是通过QueryBuilder构建还是使用Repository API。以下是两种常见的方法:
使用QueryBuilder
使用QueryBuilder时,可以链式调用多个where
或andWhere
语句来对同一字段增加多个条件。例如,如果您想要查询一个名为User
的实体,根据年龄过滤多个不同的范围,可以这样做:
typescriptconst 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岁之间的用户,你可以这样构建查询:
typescriptconst users = await userRepository.find({ where: [ { name: 'John', age: MoreThan(20) }, { name: 'John', age: LessThan(30) } ] });
这个查询将返回所有名为"John",年龄大于20岁且小于30岁的用户。
使用原生SQL
如果你需要更复杂的查询或者需要使用特定的SQL语句,你可以使用原生SQL:
typescriptconst 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语句中。此外,这些例子中用到的方法(如MoreThan
和LessThan
)是TypeORM提供的特定功能,可以更方便地构建比较查询。
2024年6月29日 12:07 回复