所以我的/ config / models看起来像这样。
Person
name Text
Car
name Text
PersonCar
personId PersionId eq
carId CarId eq
UniquePersonCar personId carId
假设数据库中的输入分别为Person "Batman"
Person "Superman"
Car "SUV"
Car "Ford"
。
我目前正在执行此操作以将其链接到我的处理程序中。
runDB $ do
person <- selectFirst [PersonName ==. "Batman"] []
car <- selectFirst [Carname ==. "SUV"] []
let Entity personId _ = case person of
Just info -> infor
Nothing -> error "no such Person"
let Entity carId _ = case car of
Just info -> infor
Nothing -> error "no such Car"
_ <- insert $ PersonCar personId carId
有更简单的方法吗?是否存在进行此类表达的约定?
答案 0 :(得分:1)
不,目前还没有这种查询的简写(我至少可以想到)。
答案 1 :(得分:1)
错误调用将暂停您的应用。 logError可能会更好。
这更短:
import Data.Conduit
import qualified Data.Conduit.List as DCL
runDB $ do
mbPersonId <- runResourceT $ selectKeys [PersonName ==. "Batman"] [] $$ DCL.head
mbCarId <- runResourceT $ selectKeys [CarName ==. "SUV"] [] $$ DCL.head
case (mbPersonId, mbCarId) of
(Just personId, Just carId) -> do
_ <- insert $ PersonCar personId carId
return ()
_ -> $(logError) "error looking for Batman and SUV"