Как применить критерий where к одному и тому же полю более одного раза в TypeORM? - PullRequest
1 голос
/ 10 июля 2020

Я хочу express этот запрос в TypeORM:

select * from user where x > 5 and x < 10

или другие варианты, например:

select * from user where x > '2020-01-01' and x < '2020-10-10'
select * from user where x >= 5.5 and x <> 10

Как мне это сделать?

userRepo.find({where: {x: MoreThan(5), x: LessThan(10)}})

явно не разрешено.

1 Ответ

1 голос
/ 10 июля 2020

Basi c

На странице параметров поиска есть функция между, которая позволяет вам просто сделать это

import {Between} from "typeorm";

const loadedPosts = await connection.getRepository(Post).find({
    likes: Between(1, 10)
});

Итак, в вашем случае это:

userRepo.find({where: {x: Between(5,10)}})

Расширенный

Если вам нужен больший контроль над запросом, как в добавленном примере, вы можете использовать raw

import {Raw} from "typeorm";

const loadedPosts = await connection.getRepository(Post).find({
    currentDate: Raw(alias =>`${alias} > NOW()`)
});

Создает:

SELECT * FROM "post" WHERE "currentDate" > NOW()

В переводе на вашу проблему:

userRepo.find({
    where: {
        x: Raw(alias => `${alias} >= 5.5 and ${alias} <> 10`) 
    }
})

Custom

Это может стать слишком утомительным и быстро, и вы можете прибегнуть к более основному c построителю запросов для большего контроля

...