TypeORM的“OR”运算符

66

我在TypeORM的文档和源代码中找不到任何关于OR运算符的概念,它是否支持它呢?

我正在尝试使用一个仓库进行基本搜索。

db.getRepository(MyModel).find({
  name : "john",
  lastName: "doe"
})

我知道这会生成一个AND操作,但是我需要一个OR操作,所以SQL应该是:

我知道这会生成一个AND操作,但是我需要一个OR操作,所以SQL应该是:

name='john' OR lastName='doe'

我是否被迫使用查询构建器来完成像这样基本的操作?

4个回答

125
db.getRepository(MyModel).find({
  where: [
      { name: "john" },
      { lastName: "doe" }
  ]
})

将数组传递给where


9
适用于Postgres。问题是,现在如何将这个“OR”子句与其他“AND”子句相结合。有什么想法吗? - Alex Fortuna
1
向对象添加更多属性。 - Praveen Prasad
1
嗯,如何表达括号? - Klesun
这个执行的是AND而不是OR。 - Frank HN
@AlexFortuna 我也在想同样的问题,或者希望顶层子句是一个AND子句,带有一个OR子句。 WHERE (column_a = "foobar" AND (column_b = "foo" OR column_c = "bar")) - scorgn
显示剩余2条评论

15
我遇到了同样的问题,但是我使用QueryBuilder绕过了它。
这是一个例子。
return await getRepository(MyModel)
  .createQueryBuilder()
  .where("name = :name OR lastName = :lastName", {
    name: "john",
    lastName: "doe"
  })
  .getMany();

5
嗯,另一个没有 QueryBuilder 的答案也很好用,但是如果您仍然想使用 QueryBuilder,那么您也可以使用 orWhere 来创建您的 OR 表达式。 - Arnold Schrijver

12
您可以通过以下方式将“OR”子句与其他“AND”结合使用。
db.getRepository(MyModel).find({
  where: [
      { name: "john", lastName: "doe" },
      { age: 20 }
  ]
})

这将导致:
select * from model where (name = "john" and lastname = "doe") OR age = 20

希望这能帮到你。

9

若要在 子句 中使用 OR,我必须重复 主句

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

查找所有与 name = "TypeORM"initials = "TORM" 相关的 Timber Saw 项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接