2012-06-15 2 views
11

LIKE 쿼리를 persistent에서하고 싶습니다. sqlite를 사용하고 있습니다. yesod의 책은 그것을 할 원시 SQL을 사용하는 예를 제공하지만, 말한다 :백엔드 관련 연산자를 사용하여 영구적 인 예제

이 때문에 백엔드 특정 수 있습니다 영구 0.6에 추가 된 기능에 일반적인 구문에 직접 LIKE 연산자를 표현할 수 운영자

나는 그 예를 찾을 수 없었다. 누군가가 selectList 또는 그와 비슷한 값을 가진 LIKE와 같은 특정 연산자를 사용한다는 것을 의미하는 예가 있습니까?

감사합니다.

답변

7

이전에 사용 했었지만 어디에서 기억이 나는지 알고 있습니다. 어쨌든, 간단한 예제 (GHC-확인하지, 사과는) 다음과 같습니다

selectList [Filter PersonName (Left $ PersistText "%Michael%") (BackendSpecificFilter "ILIKE")] [] 

은 분명히 당신이, 예컨대 :

icontains field val = Filter field (Left $ PersistText $ T.concat ["%", val, "%"]) (BackendSpecificFilter "ILIKE") 
selectList [Personname `icontains` "Michael"] [] 
+1

감사를 일부 도우미 함수를 만들 수 있습니다. 당신이 두려워 하듯이 코드는 컴파일되지 않지만 멀리 있지는 않습니다 : 필터 필드 (Left $ T.concat [ "%", val, "%"]) (필터는 PersistText가 아닌 텍스트를 취하는 것으로 보입니다) –

+3

필드 밸리 = 필터 필드 (Left $ T.concat [ "%", val, "%"]) (BackendSpecificFilter "like")' –

관련 문제