如何在Yesod中获取相关字段(外键)?

时间:2018-06-20 08:54:28

标签: sql haskell yesod persistent hamlet

我在Yesod应用程序中定义了以下模型:

CvCategory
    title Text
    order Int
    UniqueCvCategory title

CvItem
    category CvCategoryId
    title Text
    fromYear Int
    toYear Int Maybe
    description Text Maybe
    UniqueCvItem title

我在处理程序中有以下查询:

cvcategories <- selectList [] [] --all cv categories

在我的哈姆雷特模板中,我想做类似的事情:

<ul>
$forall cvcategory <- cvcategories
    <li>$#{cvCategoryTitle cvcategory}
         $forall cvitem <- cvcategory --how?
         <li>#{cvItemTitle cvitem}

在Django中,您可以轻松定义一个related_name,然后使用它轻松访问所有“子对象”。在耶索德也可能吗?怎么样?

1 个答案:

答案 0 :(得分:2)

更改查询,类似

do
  cvcategories <- selectList [] [] --all cv categories
  forM cvcategories $ \cat -> do -- for each category
    cvitems <- selectList [CvCategoryId .== entityKey cat] -- all items belonging to it
    return (cat, cvitems) -- return tuple of category and its items

然后你的哈姆雷特看起来就像

<ul>
$forall (cvcategory, cvitems) <- cvcategories
    <li>$#{cvCategoryTitle cvcategory}
         $forall cvitem <- items
         <li>#{cvItemTitle cvitem}