我有3个型号
Address json
number Text
street Text
pincode Text
deriving Show
Person json
email Text
name Text
telephone Text
deriving Show
House json
rent Int
ownerId PersonId
addressId AddressId
deriving Show
我想进入所有房屋。我可以通过
获得getHouseR :: Handler Value
getHouseR = do
houses <- runDB $ selectList [] [Asc HouseRent]
return $ toJSON houses
但是我仅引用了其他实体,例如person & address
。
[{"rent":8000,"addressId":4,"ownerId":1,"id":3},{"rent":10000,"addressId":2,"ownerId":1,"id":1}]
我想获取房屋的完整信息,这意味着解决ownerId & addressId
并发送看起来像的数据,
[{"rent":8000,"address":{"number": "23", "street": "12/B", "pincode": "111111"},"owner":{"email": "hey@email.com", "name": "Moto", "telephone": "xxxxxxxxxx"},"id":3}]
是否有任何方法可以向查询中添加诸如getForiegnData
之类的信息,而这会给我带来很多麻烦?或任何其他解决方案?
答案 0 :(得分:0)
我找不到任何直接方法(类似于注释)来获取引用的模型信息。但是有两种方法可以完成此操作。
创建HouseResp
类型,它将代表您的回复正文,包括个人和地址信息。
data HouseResp = HouseResp
{ rent :: Int
, owner :: Person
, address :: Address
}
然后,修改getHouseR
以使用可用的参考ID来获取每所房屋的完整信息。
getHouseR :: Handler Value
getHouseR = do
housesWithReference <- runDB $ selectList [] [Asc HouseRent]
houses <- sequence (Import.map getCompleteHouse housesWithReference)
return $ toJSON houses
getCompleteHouse :: Entity House -> Handler HouseResp
getCompleteHouse house = runDB $ do
let rent' = houseRent (entityVal house)
person <- getJust (houseOwnerId (entityVal house))
address' <- getJust (houseAddressId (entityVal house))
return (HouseResp rent' person address')