D'un config/models
artificiel dans un site échafaudée:De retour `Peut-être (entité a)` `de Esqueleto LeftOuterJoin`
Inventory
name Text
description Text
Container
name Text
ContainerSlot
container ContainerId
item InventoryId Maybe
Maintenant, en utilisant Esqueleto, je veux utiliser LeftOuterJoin
pour obtenir les créneaux horaires dans un récipient, avec l'inventaire réel vide s'il n'a pas été affecté.
selectContainerSlots containerKey = do
stuff <- select $ from $ \(cs `LeftOuterJoin` i) -> do
on $ cs ^. ContainerSlotItem ==. just (i ^. InventoryId)
where_ $ cs ^. ContainerSlotContainer ==. val containerKey
return (cs, i)
return $ uncurry buildStuff <$> stuff
Je me attends buildStuff
avoir besoin de la signature suivante en raison de la nature "extérieure" de la jointure:
buildStuff :: Entity ContainerSlot -> Maybe (Entity Inventory) -> Result
mais trouve qu'il a besoin de ce qui suit:
buildStuff :: Entity ContainerSlot -> Entity Inventory -> Result
qui provoque des échecs d'exécution lorsque (de façon prévisible) les champs Inventory
sont remplis avec NULL
valeurs.
PersistMarshalError "field id: int64 Expected Integer, received: PersistNull"
est-il un moyen de projeter le Entity Inventory
comme Maybe (Entity Inventory)
?