typescript - TypeORM find koşullarında AND OR zincirleme
Repository find ile sorgu oluşturmaya çalışıyorum ve sorgum için bir çözüm bulamıyorum gibi görünüyor. Bunun query builder veya Raw() koşulları ile mümkün olduğunu biliyorum, ancak mümkünse Repository find kullanmak istiyorum.
Başarmaya çalıştığım koşul field1='string' VE (field2 BOŞ VEYA field2 >= Tarih()).
Şu anda benim için işe yarayan tek çözüm şudur:
where: [
{ param1: 'string', field2: IsNull() },
{ param1: 'string', field2: MoreThenOrEqual(new Date() ) }
]
Ama bu, (field1='string' VE field2 NULL) VEYA (field1='string' VEYA field2 >= Date()) olarak çevrilecektir
Şöyle bir şey denedim:
where: [
{ param1: 'string', field2: ( IsNull() || MoreThenOrEqual(new Date() ) ) }
]
Ama bunu çalıştırabilirdim. Orijinal where koşulumu sorguyu değiştirmeden yapıp yapamayacağımı bilen var mı?
Bilginize: TypeORM ile Typescript kullanıyorum.
Düzenleme 1. Yorumlardan gelen istek üzerine, mevcut uygulamamı queryBuilder kullanarak paylaşıyorum (sadece where koşulu):
.where('param1 = :var1', {va1: 'string'})
.andWhere(new Brackets(query => {
query.where('field2 IS NULL')
.orWhere('field3 >= NOW()::DATE')
})
Cevap #1
Typeorm'da bir parantez var
Kullanım :
const sql = await connection
.createQueryBuilder(User, "user")
.where("user.isAdmin = :isAdmin", { isAdmin: true })
.orWhere(
new Brackets((qb) => {
qb.where("user.firstName = :firstName1", {
firstName1: "Hello",
}).andWhere("user.lastName = :lastName1", {
lastName1: "Mars",
})
}),
)
.orWhere(
new Brackets((qb) => {
qb.where("user.firstName = :firstName2", {
firstName2: "Hello",
}).andWhere("user.lastName = :lastName2", {
lastName2: "Earth",
})
}),
)
