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

How to get related fields (foreign key) in Yesod?

我在 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,然后用这个轻松访问所有的'child objects'。这在 Yesod 也可能吗?怎么样?

更改您的查询,例如

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}