ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vapor] SQL 문으로 쿼리문 사용하기
    Programing/Vapor 2020. 6. 19. 01:44

    안녕하세요~! 5anniversary 입니다!!

     

    오늘은 SQL문을 사용하는 방법에 대해 알아보도록 할 거예요~!

     

    제가 현재 진행 중인 프로젝트 내에서 검색, Like문을 사용해야 하는 경우가 있는데, FluentMySQL에서는 제공하지 않아 

     

    생 쿼리문을 사용해보도록 할 거예요. 이외에도 불가능한 경우가 있는 경우 사용할 수가 있겠죠??

     

    한번 알아보도록 하죠~!

     

    오늘 사용할 메서드는 withPooledConnection()이라는 메소드인데요, 이 메소드는 기본 제공되는 DatabaseKit에서 제공되는 메서드예요

     

    해당 메서드를 이용하는 방법은 사용자로부터 받는 Request에서 각자의 vapor에서 사용하는 DB에 맞춰서 코드를 작성해주면 되는데요

     

    func rawExampleHandler(_ req: Request) throws -> Future<Response> {
       // search라는 parameter값을 받아줌
       guard let search = req.query[String.self, at: "search"] else {
            throw Abort(.badRequest, reason: "Missing search term in request")
       }
       
       // Article 모델로 반환 받기 위함 
       let searchResult = req.withPooledConnection(to: .mysql) { conn -> Future<[Article]> in
       
           conn  
           .raw("Select * from Article where title like '%" + search + "%'" )
           .all(decoding: Article.self)
           // 위에서 받은 search 상수로 Article 테이블에서 title 컬럼에서 검색
           
       }
    
       return searchResult.flatMap({ (result) in
            return try ResponseJSON<[Article]>(data: result).encode(for: req)
            })
       })
    }

    위에 처럼 코드를 작성해주시면 되는데요, 여기서 중요한 부분은 conn -> Future<[Article]> in인데요

     

    해당 부분에서 반환되는 모델을 작성을 잘 작성해주셔야 하고요,

     

    conn.raw("raw code").all(decoding: 모델.self) 부분에서 원하는 쿼리문을 미리 사용해본 뒤 적용시켜주시면 되겠습니다!!

    댓글

Designed by Tistory.