2
我想显示网页中的项目列表,以及来自单独表格(具有多对一关系)的相关详细信息。我如何在Yesod中做到这一点?我正在使用默认的脚手架。结果是runDB
不能嵌套在WidgetT
上下文 —左右,我想。如何结合哈姆雷特列表中单独查询中的“细节”?
为了使这更具体,我怎么定义函数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的这种方式,但同样,这是不可能的:
featuresAssocWith :: CarId -> [Entity CarFeature]
featuresAssocWith carID = selectList [CarFeatureCar ==. carID] []
虽然我尊重dblet查找的哈姆雷特代码,但我觉得奇怪的是它会被限制在小部件中发生。除此之外,我只是想知道在“Yesod”或“persistent”中是否有一种“神奇”的方式来做到这一点。现在我将最终做[this](http://stackoverflow.com/a/9389550/712526)。 谢谢你的时间。 – jpaugh 2014-09-02 23:07:07
我没有说你不能在Widget中做,只是不在哈姆雷特内部。您可以使用[handlerToWidget](http://hackage.haskell.org/package/yesod-core-1.2.19.2/docs/Yesod-Core-Widget.html#v:handlerToWidget)将任何Handler操作转换为Widget操作。 – 2014-09-03 05:02:23