2012-06-15 8 views
11

Ich möchte eine LIKE-Abfrage in persistent machen, ich benutze sqlite. Das yesod Buch gibt ein Beispiel der Verwendung von rohen SQL, es zu tun, aber sagt:Beispiel für persistent mit Backend-spezifischen Operator

Sie einen LIKE-Operator direkt in der normalen Syntax aufgrund eines in Persistent 0,6 hinzugefügt Funktion zum Ausdruck bringen können, die Backend-spezifische erlaubt Operatoren

Ich konnte jedoch kein Beispiel dafür finden. Würde jemand ein Beispiel dafür haben, was es bedeuten würde, einen bestimmten Operator wie LIKE mit selectList oder etwas Äquivalent zu verwenden?

Danke!

Antwort

7

Ich weiß, ich habe es schon einmal benutzt, aber ich kann mich nicht erinnern, wo. Wie auch immer, ein einfaches Beispiel (nicht GHC-geprüft, Entschuldigungen) wäre:

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

Offensichtlich können Sie einige Helferfunktion erstellen, z.B .:

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

Dank. Der Code kompiliert nicht, wie Sie befürchtet haben, aber Sie waren nicht weit: Filterfeld (Links $ Tconat ["%", val, "%"]) (Filter scheint entweder einen Text und nicht entweder PersistText) –

+3

Beides funktionierte nicht für mich, hier ist was: 'like field val = Filterfeld (Links $ Tconat ["% ", val,"% "]) (BackendSpecificFilter" like ")' –