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

いいえ、現在、この種のクエリの省略形はありません (少なくとも私が思いつくものです)。

于 2013-04-25T09:44:55.103 に答える
1

error を呼び出すと、アプリが停止します。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 に答える