我想在网页中显示项目列表,以及来自单独表格的相关详细信息(具有多对一关系)。我如何在 Yesod 中做到这一点?我正在使用默认的脚手架。结果是runDB
不能嵌套在WidgetT
上下文中——至少我是这么认为的。
为了使这一点更具体,我如何定义featuresAssociatedWith
要在以下 hamlet 代码中使用的函数:
<h2> Cars
$forall Entity carId car <- carList
<div class="car-item">
<h3> #{carYear car} #{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] []