gpt4 book ai didi

haskell - 是的持久: get Entity value within hamlet

转载 作者:行者123 更新时间:2023-12-02 10:02:17 25 4
gpt4 key购买 nike

假设我的配置/模型文件如下所示:

Pet
name Text
owner OwnerId
Owner
name Text

我可以这样得到宠物的名字:

 $forall Entity key pet <- pets
<span>#{petName pet}

但是我如何从宠物实体获取所有者的姓名?

换句话说,foo 应该在下面:

 <span>#{ownerName $ foo $ petOwner pet}

最佳答案

Yesod 不会像(例如)rails 那样构建关系函数,所以你必须自己编写这种东西。

-- just one naive example
petOwnerName :: Pet -> Handler (Maybe Text)
petOwnerName p = do
mo <- runDB $ get (petOwner p)
return $ fmap ownerName mo

请注意,这会在 Handler 中返回(并且它一定是由于需要数据库查询而导致的),这意味着您无法在插值中直接将其用作 foo

从字面上看,从模板中执行该操作正是您期望能够执行的操作。我要强调的是,这通常是一种设计味道,我建议您重构事物,以便您在处理程序中预先完成所有数据库查询,然后将模板需要的任何(纯)值直接传递给它。例如,您可以构建并传入 [(Pet,Owner)][(Owner, [Pet])]

我有一些helpers在我的一个网站中,抽象了查询数据库一对多关系的常用方法并返回像 (parent, child) 这样的元组列表,我发现这是最有用的方法。

希望这有帮助。

关于haskell - 是的持久: get Entity value within hamlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com