2012-06-15 13 views
11

Me gustaría hacer una consulta LIKE en persistente, estoy usando sqlite. El libro yesod da un ejemplo del uso de SQL prima para hacerlo, pero dice:Ejemplo de persistencia con el operador específico del back-end

que puede expresar un operador LIKE directamente en la sintaxis normal debido a una característica añadido en persistente 0.6, que permite-backend específico operadores

No pude encontrar un ejemplo de eso, sin embargo. ¿Alguien tendría un ejemplo de lo que significaría usar un operador específico como LIKE con selectList o algo equivalente?

Gracias!

Respuesta

7

Sé que lo he usado antes, pero no recuerdo dónde. De todos modos, un ejemplo sencillo (no-verificado GHC, disculpas) sería:

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

Obviamente se puede crear una cierta función auxiliar, por ejemplo .:

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

Gracias. El código no se compila, como temía, pero no estaba lejos: Campo de filtro (Left $ T.concat ["%", val, "%"]) (El filtro parece tomar un texto cualquiera y no persistText) –

+3

Ninguno de estos funcionó para mí, esto es lo que hice: 'como field val = Filter field (Left $ T.concat ["% ", val,"% "]) (BackendSpecificFilter" me gusta ")' –

Cuestiones relacionadas