2013-10-22 5 views
0

다양한 기준에 따라 검색해야합니다.목록이있는 Grails 컨트롤러 검색 기준

  1. 이름에 지정된 문자열이 포함되어 있으면.
  2. 이름에 지정된 문자열과 목록의 문자열이 포함되어있는 경우.
  3. 이름에 목록의 문자열 중 하나가 포함되어 있으면.

다음 코드가 있지만 작동하지 않습니다. 이 코드가 얼마나 나쁜가요?

def taskList = Object.createCriteria().list(params) { 
if (params.query) { 
    ilike("name", "%${params.query}%") 
} 
if (params.nameList) { 
    params.nameList.split("&").each { 
      or { 
       ilike("name", "%${it}$%") 
      } 
    } 
    } 

결과는 사용 사례 내가 잘못 뭐하는 거지 2 & 3. 비어 있습니다? 어떻게해야합니까?

건배

+1

두 개의 $ 기호가 "% $ {it} $ %"에 의도적입니까? – kaviddiss

+0

두 달러 기호에 아니오. 내 부분에 타이핑 오류가 있습니다. 줄은 실제로 ilike ("name", "% $ {it} %") –

답변

0

나는 3. 경우

list{ 
    or{ 
    if(params.query) ilike "name", "%${params.query}%" 
    if(params.nameList) 'in' 'name', params.nameList.split("&") 
    } 
} 
+0

쥐이어야합니다. 작동하지 않았다. 목록에서 하나 또는 두 개의 이름으로 시도했지만 어느 것도 작동하지 않았습니다. –

+0

oh 또는'{}'이 (가) 누락되었습니다. – injecteer

0
def taskList = Object.createCriteria().list(params) { 
    def names = [] 
    if(params.nameList){ 
     names = nameList.split("&") 
    } 
    or{ 
     if (params.query){ilike("name", "%${params.query}%")} 
     and{ 
      if (params.query){ilike("name", "%${params.query}%")} 
      if(names){'in'('name', names)} 
     } 
     if (names) { 
      names.each {name-> 
       or { 
        ilike("name", "%$name$%") 
       } 
      } 
     } 
    } 
} 

안된에 대한 in 연산자를 사용하려고하지만 위의와 시도 할 수 있습니다. 차라리 당신이 필요로하는 것을 성취하기 위해 HQL과 함께 가고 싶습니다.

+0

감사합니다. 시험해 보겠습니다. 그래도 며칠이 될지도 .. –