typeorm 사용시 where 조건문에서 and 나 or 조건문을 쓸 경우가 다수 존재한다.
그래서 간단한 코드로 하단에 정리를 해 보았다,
1.typeorm에서의 AND 와 OR
AND연산의 경우 where 조건문에 object 형식으로 해당 repository에서 찾아야할 value값을 넣어줄 수 있으며,
OR연산의 경우 where 조건문에 배열 형식으로 조건 object들을 다수 나열 할 수 있다.
생각보다 간편하지만 많이 헷갈리는 부분이라 간단하게 정리하길 원하는 nestjs 초보자 분들이 계시다면 도움이 되었으면 좋겠다.
//기존 query문 and
SELECT * FROM "user"
WHERE "name" = 'pei' AND "hobby" = 'reading'
//기존 query문 or
SELECT * FROM "user" WHERE ("name" = 'pei' AND "hobby" = 'reading') OR ("name" = 'tom' AND "hobby" = 'working')
//typeorm에서의 AND 연산
userRepository.find({ where: { name: "pei", hobby: "reading" } });
//typeorm에서의 OR 연산
userRepository.find({
where: [
{ name: "pei", hobby: "reading" },
{ name: "tom", hobby: "singing" },
],
});
//queryBuilder에서 의 AND 연산
createQueryBuilder("user")
.where("user.name = :name", { name: "pei" })
.andWhere("user.hobby = :hobby", { hobby: "reading" })
//상단 queryBuilder의 query문
SELECT ... FROM users user WHERE user.name = 'pei' AND user.hobby = 'reading'
//queryBuilder에서의 OR 연산
createQueryBuilder("user")
.where("user.name = :name", { name: "pei" })
.orWhere("user.name = :name", { name: "tom" })
//상단 queryBuilder에서의 AND 연산
SELECT ... FROM users user WHERE user.name = 'pei' OR user.name = 'tom'
2.typeorm에서의 between
database내에서 특정 기준의 숫자 값을 추릴수 있다. 날짜 검색시에도 new Date()함수를 사용하면 사이 날짜를 추릴 수 있다.
//query문에서의 beetween
SELECT * FROM "user" WHERE "age" BETWEEN 1 AND 10
//typeorm에서의 between
import { Between } from "typeorm"
const allAge = await data.getRepository(User).findBy({
age: Between(1, 10),
})
//날짜검색 between
import { Between } from "typeorm";
const userRepository = dataSource.getRepository(User);
const users = await userRepository.find({
where: {
createdAt: Between(
new Date(2022, 9, 1),
new Date(2022, 10, 30)
),
}
})
console.log(users);