[ 검색기능 ] typeORM에서 Like 기능으로 필드명 검색





프엔에서 상품을 검색했을때 상품명(들)이 조회되도록 하는 api를 만들어야했다.

이럴때는 Like 문법을 사용하면 된다.

sql에서는 like 사용하면 되는것으로 알고는 있었는데,

이걸 node에서 어떻게 연결하지, 생각하다가 typeORM 문법에서 뭔가 지원해줄거같아서 찾아봤는데 역시 친절하게 설명되어있었다

typeORM 공식문서에 보면 Like를 검색해보면

import { Like } from "typeorm"

const loadedPosts = await dataSource.getRepository(Post).findBy({
    title: Like("%out #%"),
})
SELECT * FROM "post" WHERE "title" LIKE '%out #%'

이렇게 나와있는데


import { Like } from "typeorm"

로 import를 하고,

findBy 로 조건을 준다.

title 은 찾을 필드명, Like 는 찾을 내용.

공식 docs에 있는 저 내용은 단어 중간에 out # 라는 문자열이 들어간 그 어떠한 경우에도 다 찾을 수 있다는 소리다.

쿼리에서 % 는 어떤내용이든 들어와도 괜찮다, 는 뜻이다.

만약 title필드에서 out 으로 시작되는 문자를 찾는다고 하면 title: Like("out #%"),

이렇게 써주면 out으로 시작되는 모든 경우를 찾는다.



근데 이 SELECT * FROM "post" WHERE "title" LIKE '%out #%' 쿼리문은 mysql에서 에러 뜬다

필드명에 "" 가 있으면 안된다.

그래서

SELECT * FROM sorahomework.product p WHERE name LIKE '%찾고싶은문자열%'; 이런식으로 작성하니까 됨 ㅎㅎ

mysql에서 먼저 조회해보고,


nest에서는

async searchAll({ word }): Promise<Product[]> {
  return await this.productsRepository.findBy({
  	name: Like(`%${word}%`),
  });
}

2개 이상의 결과값을 받아올 수도 있으니 배열로 넣어줬다.

name 필드에서 word파라미터의 문자열을 검색해본다.



에러없이 잘 작동! ♪♪(oᐛ)o~♪♪









© 2018. by sora

Powered by sora