2016-01-07 40 views
0

我一直在下面的耶索德的SQL Joins的例子,我想添加到內部連接例子也是一個where_條款 - 它應該只顯示了博客,其中作者ID高於1Esqueleto凡實體ID

認爲我的錯誤是可能是我做E.val 1,但不知道如何將它傳遞的Key它期待得到

getHomeR :: Handler Html 
getHomeR = do 
    blogs <- runDB 
      $ E.select 
      $ E.from $ \(blog `E.InnerJoin` author) -> do 
       E.on $ blog ^. BlogAuthor E.==. author ^. AuthorId 
       E.where_ $ author ^. AuthorId E.>. (E.val 1) -- how to pass ID 1 
       E.limit 5 
       return 
        (blog ^. BlogId 
        , blog ^. BlogTitle 
        , author ^. AuthorName 
        ) 

回答

0

答案感謝,我發現這gist

以下是完整的示例:

import Database.Persist.Sql (toSqlKey) 
import qualified Database.Esqueleto  as E 
import   Database.Esqueleto  ((^.)) 

getHomeR :: Handler TypedContent 
getHomeR = do 
    let authorID = toSqlKey 1 :: AuthorId -- cast 1 to the expected key 
    let blogsSrc = 
      E.selectSource 
      $ E.from $ \(blog `E.InnerJoin` author) -> do 
       E.on $ blog ^. BlogAuthor E.==. author ^. AuthorId 
       E.where_ $ author ^. AuthorId E.>. E.val authorID 
       return 
        (blog ^. BlogId 
        , blog ^. BlogTitle 
        , author ^. AuthorName 
        )