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