0

次のモデルがあるとします。

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 つのテーブルに対する単純なクエリのインターフェイスのみを提供するように思えます。

4

2 に答える 2

2

あなたは私と同じ割り当てを行っているので、開始フレームワークのルートにある ManyToMany.hs ファイルを紹介したいと思います。これには、与えられたキーに基づいてテーブルを結合する joinTables と joinTables3 という 2 つの重要な関数が含まれています。後者の使用例は、getPaymentsR の下の /Handler/Payment.hs にあります。それを使用すると、結果が [(Entity ReceiptUser, Entity Receipt, Entity Payment)] になるような結合を作成できるはずです。

于 2013-11-02T14:43:29.393 に答える