次のモデルがあるとします。
User
ident Text
password Text Maybe
UniqueUser ident
deriving Typeable
Payment
timestamp UTCTime
from UserId
to UserId
receiptId ReceiptId
ReceiptUser
userId UserId
receiptId ReceiptId
Receipt
owner UserId
money Int
次のようなクエリを実行したい:
SELECT ReceiptUser.UserId, Receipt.ReceiptOwner, Receipt.Id, Receipt.Price
FROM ReceiptUser, Receipt, Payment
WHERE ReceiptUser.ReceiptId == Receipt.Id
AND NOT (Payment.ReceiptId == Receipt.Id AND Payment.From == ReceiptUser.UserId AND Payment.To == Receipt.Owner)
これは、別のユーザーにまだ支払っていないすべてのユーザーと、対応する領収書情報を見つけることになっています。
これを yesod パーシスタントでどのように表現できますか? 永続的なのは、1 つのテーブルに対する単純なクエリのインターフェイスのみを提供するように思えます。