sql - TypeORM "VEYA" operatörü


Ne TypeORM belgelerinde ne de kaynak kodunda OR operatörüyle ilgili herhangi bir kavram bulamadım. Acaba bunu destekliyor mu?

Bir depo ile basit bir arama yapmaya çalışıyorum.

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

Bunun bir AND işlemi ürettiğini biliyorum ama ben bir OR işlemi istiyorum, bu yüzden SQL şöyle görünecek:

name='john' OR lastName='doe'

Böyle basit bir şey için sorgu oluşturucuyu kullanmak zorunda mıyım?

Cevap #1

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

where'e bir dizi geçirin

Cevap #2

Aşağıdakileri yaparak "VEYA" alt cümlesini ek "VE" ile birleştirebilirsiniz.

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

Bu şu sonucu doğururdu

select * from model where (name = "john" and lastname = "doe") OR age = 20

Umarım bu yardımcı olur.

Cevap #3

Ben de aynı sorunla karşılaştım, ama QueryBuilder ile bunu aştım.

Bu bir örnek olacaktır.

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

Cevap #4

0.3.18 sürümünden itibaren (03-01-2024 tarihinde yayınlandı), TypeORM artık temel .find* yöntemlerinde bir Or operatörünü desteklemektedir:

const users = await db.getRepository(User).findBy({
    name: Or(Equal("John"), ILike("Jane%")),
})
-- Will generate the following query:
SELECT * FROM "user" WHERE "name" = 'John' OR "name" ILIKE 'Jane%'

Ne yazık ki bu, sunduğunuz senaryoyu çözmüyor, sadece tek bir alanın dahil olduğu durumları çözüyor. Yine de diğer kullanıcılar için işe yarayabilir.

Cevap #5

sub-clause içinde OR kullanmak için main-clause'u tekrar etmem gerekiyor

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

Tüm Timber Saw öğelerini, name="TypeORM" veya initials="TORM" projelerine sahip olanları bulun

İlgili makaleler