8

所以我的 /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

有没有更简单的方法来做到这一点?是否有进行这种表达的约定?

4

2 回答 2

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"
于 2013-04-25T10:45:33.517 回答
1

不,目前这种查询没有简写(至少我能想到)。

于 2013-04-25T09:44:55.103 回答