我想在网页中显示项目列表,以及来自单独表格的关联详细信息(具有多对一关系)。我如何在Yesod中做到这一点?我正在使用默认的脚手架。结果是runDB
不能嵌套在WidgetT
上下文中 - 或者我认为。
为了使其更具体,如何定义要在以下hamlet代码中使用的函数featuresAssociatedWith
:
<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] []
答案 0 :(得分:2)
Hamlet旨在不允许您在其中执行数据库查询等操作。相反,您需要在哈姆雷特之外执行查询,然后传递汽车信息元组列表以及相关表格中的数据。