2

我想在网页中显示项目列表,以及来自单独表格的相关详细信息(具有多对一关系)。我如何在 Yesod 中做到这一点?我正在使用默认的脚手架。结果是runDB不能嵌套在WidgetT上下文中——至少我是这么认为的。

为了使这一点更具体,我如何定义featuresAssociatedWith要在以下 hamlet 代码中使用的函数:

<h2> Cars

$forall Entity carId car <- carList
    <div class="car-item">
        <h3> #{carYear car}&nbsp;#{carMake car} #{carModel car}
        <ul>
            $forall feature <- featuresAssociatedWith carId
                <li> #{feature}

给定以下模型:

Car
    make        Text
    model       Text
    year        Int

CarFeature
    car         CarId
    text        Text
    UniqueCF    car text

这是当前的处理函数

getCarListR :: Handler Html
getCarListR = do
        carList <- runDB $ selectList [] [Asc CarOrder]
        liftIO $ print $ length carList
        defaultLayout $ do
            setTitle "Cars"
            $(widgetFile "carList")

以这种方式在 Widget中嵌入查询似乎是最自然的runDB,但同样,这是不可能的:

featuresAssocWith :: CarId -> [Entity CarFeature]
featuresAssocWith carID = selectList [CarFeatureCar ==. carID] []
4

1 回答 1

2

Hamlet 旨在不允许您在其中执行诸如数据库查询之类的操作。相反,您需要在 hamlet 之外执行查询,然后传入汽车信息元组列表以及关联表中的数据。

于 2014-09-01T04:07:49.270 回答