我有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": "[email protected]", "name": "Moto", "telephone": "xxxxxxxxxx"},"id":3}]
有没有办法在查询中添加像getForiegnData
这样的信息,这会把我这一切都拿来?或任何其他解决方案?
我找不到任何直接的方式(类似于注释)来获取引用的模型信息。但我们有两种方法可以完成这项工作。
创建HouseResp
类型,它将代表您的响应主体,包括人员和地址信息。
data HouseResp = HouseResp
{ rent :: Int
, owner :: Person
, address :: Address
}
然后,通过使用可用的引用ID修改getHouseR
以获取每个房屋的完整信息。
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')