首页 > 解决方案 > 使用连接将流利的结果映射到结构

问题描述

好的,所以,我一直在为 Vapor/Fluent 和更复杂的数据返回而苦苦挣扎。

我基本上试图在 fluent-mysql 中返回以下查询:

select e.*,
    et.description,
    es.description
from
    e inner join et on e.tid = et.id
    inner join e.sid=es.id
where e.deleted=0

相当标准。所以,我使用的函数有这个“查询”:

return Equipment.query(on: req)
    .filter(\Equipment.deleted==false)
    .join(\Equipment.typeid, to: \EquipmentTypes.id )
    .join(\Equipment.seriesid, to: \EquipmentSeries.id )
    .alsoDecode(EquipmentTypes.self)
    .alsoDecode(EquipmentSeries.self)
    .all()

我知道我不能让函数返回一个基本模型:

return Equipment.query(on: req).decode(Equipment.self).all()

所以我需要“映射”或“flatMap”到一个结构,所以我定义了一个(暂时忽略初始化):

struct EquipmentArray: Encodable {
     let id: Int
     let description: String
     let seriesid: Int
     let series: String
     let typeid: Int
     let type: String
     let mintime: Int
     let maxtime: Int
     let room_length: Double
     let room_width: Double
     let lamps_bottom: Bool
     let lamps_top: Bool
     let lamps_facial: Bool
     let lamps_shoulder: Bool
     let lamps_neck: Bool
     let deleted: Bool

     init(id: Int){
      self.id = id
     }

}

这给了我函数头用作:

func getAllHandler(_ req: Request) throws -> Future<[EquipmentArray]>{

这是我挂断电话的地方 - 我可以看到将 flatMap/map 1 结果映射到结构的示例,但没有将元组(?)映射到结构的示例。基本上映射[((Equipment, EquipmentType), EquipmentSeries)] -> [EquipmentArray]

有没有人有任何关于如何做到这一点的好例子?

标签: dictionarytuplesfluentvaporflatmap

解决方案


推荐阅读