typeorm“ OR”运算符

lev*_*per 5 sql operators typescript typeorm

我在typeorm文档或源代码中都找不到OR运算符的任何概念。它完全支持吗?

我正在尝试使用存储库执行基本搜索。

db.getRepository(MyModel).find({
  name : "john",
  lastName: "doe"
})
Run Code Online (Sandbox Code Playgroud)

我知道这会生成一个AND操作,但是我需要一个OR操作,因此sql看起来像:

name='john' OR lastName='doe'
Run Code Online (Sandbox Code Playgroud)

我是否被迫使用查询构建器来进行类似这样的基本操作?

Pra*_*sad 45

db.getRepository(MyModel).find({
  where:[
      {name:"john"},
      {lastName: "doe"}
  ]
})
Run Code Online (Sandbox Code Playgroud)

将数组传递给 where

  • 适用于 Postgres。现在的问题是如何将这个“OR”子句与附加的“AND”子句结合起来。有任何想法吗? (9认同)

Seg*_*ess 17

您可以通过执行以下操作将“OR”子句与附加“AND”结合起来。

db.getRepository(MyModel).find({
  where: [
      { name: "john", lastName: "doe" },
      { age: 20 }
  ]
})
Run Code Online (Sandbox Code Playgroud)

这将导致

select * from model where (name = "john" and lastname = "doe") OR age = 20
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


Jav*_*ian 14

我遇到了同样的问题,但我使用QueryBuilder解决了这个问题。

这就是一个例子。

return await getRepository(MyModel)
  .createQueryBuilder()
  .where("name = :name OR lastName = :lastName", {
    name: "john",
    lastName: "doe"
  })
  .getMany();
Run Code Online (Sandbox Code Playgroud)

  • 好吧,没有 QueryBuilder 的另一个答案效果很好,但是如果您无论如何都想使用 QueryBuilder 那么您也可以使用 [orWhere](https://typeorm.io/#/select-query-builder/adding-where-表达式)来创建“OR”表达式。 (5认同)

van*_*102 10

OR在 中使用sub-clause,我必须重复main-clause

userRepository.find({
  where: [
    {
      firstName: 'Timber',
      lastName: 'Saw',
      project: {
        name: 'TypeORM',
      },
    },
    {
      firstName: 'Timber',
      lastName: 'Saw',
      project: {
        initials: 'TORM',
      },
    },
  ],
});

Run Code Online (Sandbox Code Playgroud)

查找所有Timber Saw带有name = "TypeORM" 或 的项目initials = "TORM"