我想在叶模板中显示text = cur.fetchone()[0]
查询的结果(调试显示正在工作):
join
我无法找到一种将上下文直接作为数组传递的方法(例如在Vapor 2中)。因此,我正在尝试使用可编码结构:
persons.get("/persons")
{ request ->Future<View> in
return Title.query(on:request).join(\Person.titleId, to:\Title.id)
.alsoDecode(Person.self).all().flatMap(to: View.self) { pers in
let context = APContext(title: "Demo", personnel: pers)
let leaf = try request.make(LeafRenderer.self)
return leaf.render("persons", context)
}
}
documentation已过时,因为它建议创建struct APContext: Encodable {
let title: String
let personnel: [(Title,Person)]
}
属性,因为personnel
可以工作,但是已将其删除。如果使用上面的EncodableStream
,则会产生编译错误:
类型“ APContext”不符合协议“可编码”
如果我简化查询,则定义变为:
struct
然后它起作用。
因此,我想我的问题可以归结为:如何使let personnel = [Person]
可编码?
答案 0 :(得分:0)
由于狮子座的建议,我有了一个解决方案:
struct Personnel: Encodable {
let title: Title
let person: Person
}
并在路由中包括以下内容:
var enc: [Personnel] = []
for per in pers {
enc.append(Personnel(title:per.1,person:per.0))
}
enc
现在可以愉快地传递到叶子模板。唯一需要注意的是,标记必须包含personnel
结构中的字段名称,例如per.person.surname
。