Yesod は (例えば) Rails のようにリレーション用の関数を構築しないので、この種のものを自分で書く必要があります。
-- just one naive example
petOwnerName :: Pet -> Handler (Maybe Text)
petOwnerName p = do
mo <- runDB $ get (petOwner p)
return $ fmap ownerName mo
foo
これは Handler に返されることに注意してください (必要な DB クエリのために必要です)。つまり、補間で直接使用することはできませんでした。
あなたの例を文字通りに取ると、テンプレート内からそのアクションを実行することは、まさにあなたができると期待することです. これは通常、デザインの臭いであることを強調し、すべてのデータベース クエリをハンドラーで前もって実行し、テンプレートが必要とする (純粋な) 値を直接ハンドラーに渡すように、物事を再構築することをお勧めします。たとえば、[(Pet,Owner)]
またはを構築して渡すことができます。[(Owner, [Pet])]
私のサイトの 1 つで、1 対多の関係について DB にクエリを実行し、最も便利な方法であると思われるタプルのリストを取得する一般的な方法を抽象化するヘルパーがいくつかあります。(parent, child)
お役に立てれば。