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

TypeORM find where conditions AND OR chaining

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

1个答案

1

在TypeORM中,执行查询时,您可以使用findcreateQueryBuilder方法来构建查询,并且可以通过传递一个条件对象来指定where子句,从而实现AND和OR链接。以下是如何使用TypeORM来构建带有AND和OR条件的查询的一些例子:

使用 find 方法

当您使用find方法时,可以通过在where选项中传递更复杂的对象来构建AND和OR条件。以下是一个例子:

javascript
import { getConnection } from "typeorm"; const users = await getConnection() .getRepository(User) .find({ where: [ { firstName: "Timber", lastName: "Saw" }, { firstName: "Phantom" } ] });

在这个例子中,find方法会返回所有名为"Timber"并且姓为"Saw"的用户,或者所有名为"Phantom"的用户。

使用 createQueryBuilder 方法

使用createQueryBuilder可以提供更强大的查询构建能力,包括复杂的AND和OR逻辑。以下是一个例子:

javascript
import { getConnection } from "typeorm"; const users = await getConnection() .getRepository(User) .createQueryBuilder("user") .where("user.firstName = :firstName", { firstName: "Timber" }) .andWhere("user.lastName = :lastName", { lastName: "Saw" }) .orWhere("user.firstName = :otherFirstName", { otherFirstName: "Phantom" }) .getMany();

在这个例子中,createQueryBuilder用来查找所有名为"Timber"并且姓为"Saw"的用户,或者名为"Phantom"的用户。使用andWhere方法可以添加一个AND条件,而orWhere方法则用于添加一个OR条件。

使用 Brackets 来分组条件

如果您需要在查询中组合AND和OR条件,可以使用Brackets类来创建更复杂的逻辑组合:

javascript
import { getConnection, Brackets } from "typeorm"; const users = await getConnection() .getRepository(User) .createQueryBuilder("user") .where(new Brackets(qb => { qb.where("user.firstName = :firstName", { firstName: "Timber" }) .andWhere("user.lastName = :lastName", { lastName: "Saw" }) })) .orWhere(new Brackets(qb => { qb.where("user.firstName = :otherFirstName", { otherFirstName: "Phantom" }) })) .getMany();

在这个例子中,我们使用了Brackets来对条件进行了分组,以此来构建更为复杂的查询逻辑。首先,我们有一个组合了"Timber"和"Saw"的AND条件;然后又有一个单独的OR条件来检查名字为"Phantom"的用户。

通过以上的方式,TypeORM提供了灵活的方法来构建包含复杂条件的SQL查询。

2024年6月29日 12:07 回复

你的答案