2017-09-11 8 views
0

저는 스칼라 Anorm을 프로젝트에 사용하고 사례 클래스에 대한 파서를 작성하고 싶습니다. 그런 다음이 파서를 다른 쿼리 (일반적으로 JOIN을 추가 할 때)에 다시 사용합니다.Anorm RowParser [A]를 RowParser [Option [A]]로 변환하는 방법

때로는 선택적 값 (예 : 인 LEFT JOIN)이 필요합니다. 같은 파서를 재사용 할 수 있다면 얼마나 편리할까요? 다음 파서

case class Specialty(
    id: Long, 
    name: String 
) 

:

def parser(table: String): RowParser[Specialty] = { 
    get[Long]("id") ~ get[String](table + ".name") map { 
     case id ~ name => Specialty(id, name) 
    } 
    } 

가 어떻게 parser:RowParser[OptionSpecialty]]parser:RowParser[Specialty]를 설정할 수 있습니다 예를 들어, 나는 다음과 같은 경우 클래스가 말한대로

?

이렇게하면 테이블 전문이 LEFT JOIN을 통해 추가 된 쿼리에서이 정보를 사용할 수 있습니다. 정보의 추가 조각으로

는, 지금은이 같은 파서를 다시 작성 :

def parserOptional(table: String):RowParser[Option[Specialty]] = { 
    get[Option[Long]]("id") ~ get[Option[String]](table + ".name") map { 
     case oid ~ oname => oid.flatMap{id => 
     oname.map{name => 
      Specialty(id, name) 
     } 
     } 
    } 
    } 

답변

0

this에 따라, 내가 대답

사용 (parser ?) 또는

def parserOptional(table: String):RowParser[Option[Specialty]] = parser(table) ? 
+1

"을 찾은 것 같아요 작동하지 않는 것 같아요. "라는 말은 정확하지는 않습니다 (반면 '.?'조합은 테스트의 대상이됩니다) – cchantep