2015-01-21 34 views
8

Io uso Persistent orm con framework web scotty.Haskell Persistent: come ottenere l'entit da db by key se ho la chiave in variabile intera?

Voglio ottenere valore da db per id. Questi ID vengono dalla richiesta GET

Ci sono funzioni "get" che richiedono la variabile "Key Entity" e restituiscono "Maybe Entity".

Io uso seguente codice per ottenere il valore da db

k <- keyFromValues $ [(PersistInt64 myOwnIntVarFromRequest)] 
case k of 
    Left _ -> {-some processing-} 
    Right x -> do 
    t <- liftIO . runDb $ get (x::Key Post) --Post is one of my models 
    case t of 
     Nothing -> {-processing-} 
     Just x -> {-processing-} 

Questi codice è estremamente brutto. Ma non so come farlo meglio

Quindi la mia domanda è come ottenere la variabile di tipo "Entità chiave" senza chiamare keyFromValues.

PS Scusate per il mio povero inglese

risposta

11

È possibile utilizzare toSqlKey per questo.

+0

Grazie per la risposta! –

+0

@ michael-snoyman: Cosa succede se la chiave ha un tipo diverso da 'Int64'? –

+0

In realtà non ho familiarità con il meccanismo di chiave primaria più flessibile nel persistente, quindi non posso consigliarti su come gestire quel caso. –