Хорошо, я боролся с 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]
У кого-нибудь есть хорошие примеры того, как это сделать?