Отображение свободного результата с объединениями в структуру - PullRequest
0 голосов
/ 14 сентября 2018

Хорошо, я боролся с 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» на структуру, поэтому я определил одну (пока игнорируем init):

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 приводит к struct, но не пример отображения кортежа (?) В struct. В основном отображение [((Equipment, EquipmentType), EquipmentSeries)] -> [EquipmentArray]

У кого-нибудь есть хорошие примеры того, как это сделать?

...