2012-06-15 19 views
11

Tôi muốn thực hiện truy vấn LIKE liên tục, tôi đang sử dụng sqlite. Cuốn sách Yesod đưa ra một ví dụ về sử dụng SQL liệu để làm điều đó, nhưng nói:Ví dụ về liên tục với toán tử cụ thể phụ trợ

bạn có thể bày tỏ một nhà điều hành NHƯ trực tiếp trong cú pháp bình thường do một tính năng thêm vào trong dai dẳng 0.6, cho phép phụ trợ cụ thể nhà khai thác

Tôi không thể tìm thấy ví dụ về điều đó. Ai đó sẽ có một ví dụ về những gì nó có nghĩa là để sử dụng một nhà điều hành cụ thể như LIKE với selectList hoặc một cái gì đó tương đương?

Cảm ơn!

Trả lời

7

Tôi biết tôi đã sử dụng nó trước đây, nhưng tôi không thể nhớ ở đâu. Dù sao, một ví dụ đơn giản (không GHC kiểm tra, lời xin lỗi) sẽ là:

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

Rõ ràng bạn có thể tạo ra một số chức năng trợ giúp, ví dụ .:

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

Cảm ơn. Mã không biên dịch, như bạn lo sợ, nhưng bạn không xa: Trường bộ lọc (Còn lại $ T.concat ["%", val, "%"]) (Bộ lọc có vẻ mất cả Văn bản và không phải là PersistText) –

+3

Cả hai đều không làm việc cho tôi, đây là những gì đã làm: 'như trường val = Trường lọc (Còn lại $ T.concat ["% ", val,"% "]) (BackendSpecificFilter" like ")' –