2

Web ページにアイテムのリストを、別のテーブルの関連する詳細と共に (多対 1 の関係で) 表示したいと考えています。Yesod でこれを行うにはどうすればよいですか? デフォルトの足場を使用しています。結果はrunDB、コンテキスト内でネストできないということですWidgetT— またはそう思います。

これをより具体的にするfeaturesAssociatedWithために、次のハムレット コードで使用する関数をどのように定義すればよいでしょうか。

<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")

この方法でウィジェットにクエリを埋め込むのが最も自然に思えrunDBますが、これも不可能です。

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

1 に答える 1

2

Hamlet は、内部でデータベース クエリなどのアクションを実行できないように設計されています。代わりに、hamlet の外でクエリを実行し、関連付けられたテーブルのデータと共に車の情報のタプルのリストを渡す必要があります。

于 2014-09-01T04:07:49.270 に答える