Ich bin mit einigen Problemen beim Erstellen einer Verknüpfung, die eine maybe foreign key
verwendet.Haskell Esqueleto - Vielleicht Keys binden nicht auf LeftOuterJoin
Meine Models:
OrderItem
productSnapshot ProductSnapshotId
ProductFlow
productInstance ProductInstanceId
orderItem OrderItemId Maybe
ProductSnapshot
productInstance ProductInstanceId
ProductInstance
code Text
Und mein verbindet:
type Entities = [(Entity OrderItem, Entity ProductSnapshot, Entity ProductInstance, Maybe (Entity ProductFlow))]
loadEntities :: OrderItemId -> Handler Entities
loadEntities oiId = runDB
$ E.select
$ E.from $ \(oi `E.InnerJoin` ps `E.InnerJoin` pi `E.LeftOuterJoin` pf) -> do
E.on $ pf E.?. ProductFlowOrderItem E.==. E.just (oi ^. OrderItemId)
E.on $ pi ^. ProductInstanceId E.==. ps ^. ProductSnapshotProductInstance
E.on $ ps ^. ProductSnapshotId E.==. oi ^. OrderItemProductSnapshot
E.where_ (oi ^. OrderItemId E.==. E.val oiId)
return (oi, ps, pi, pf)
Ich habe versucht, die Esqueleto
oben zeigte join, aber ich habe den folgenden Fehler:
Couldn't match type ‘Key OrderItem’ with ‘Maybe (Key OrderItem)’
Expected type: EntityField OrderItem (Maybe (Key OrderItem))
Actual type: EntityField OrderItem (Key OrderItem)
In the second argument of ‘(^.)’, namely ‘OrderItemId’
In the first argument of ‘E.just’, namely ‘(oi ^. OrderItemId)’
ich denke, es wird verursacht, weil ich einen vielleicht fremden Schlüssel verwende. Ich habe es auf andere Arten versucht und seltsame Typfehler bekommen. Ich denke, ich verstehe nicht ganz genau, wie diese Verbindungen funktioniert, so eine kurze Erklärung über E.^.
, E.just
und E.?.
würde meine Esqueleto Verwendung verbessern.