2012-06-15 13 views
11

Vorrei fare una query LIKE in persistente, sto usando sqlite. Il libro yesod fornisce un esempio di utilizzo di SQL prime a farlo, ma dice:Esempio di persistente con operatore specifico backend

è possibile esprimere un operatore LIKE direttamente nella sintassi normale a causa di un caratteristica aggiunta in persistente 0.6, che permette specifici backend operatori

Non sono riuscito a trovarne un esempio. Qualcuno potrebbe avere un esempio di cosa significherebbe utilizzare un operatore specifico come LIKE con selectList o qualcosa di equivalente?

Grazie!

risposta

7

So che l'ho usato prima, ma non riesco a ricordare dove. In ogni caso, un semplice esempio (non GHC-controllato, scuse) sarebbe:

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

Ovviamente è possibile creare una certa funzione di supporto, ad es .:

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

Grazie. Il codice non viene compilato, come temevi, ma non eri lontano: campo Filtro (a sinistra $ T.concat ["%", val, "%"]) (Il filtro sembra prendere un testo e non uno di entrambi PersistText) –

+3

Nessuno di questi ha funzionato per me, ecco cosa ha fatto: 'like campo val = Campo filtro (Left $ T.concat ["% ", val,"% "]) (BackendSpecificFilter" come ")' –