Swift 无法找到使联接查询结果在Vapor 3中可编码的方法
我想在叶模板中显示Swift 无法找到使联接查询结果在Vapor 3中可编码的方法,swift,vapor,Swift,Vapor,我想在叶模板中显示join查询(调试显示正在运行)的结果: 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
join
查询(调试显示正在运行)的结果:
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)
}
}
已过期,因为它建议将personal
属性创建为EncodableStream
将起作用,但此属性已被删除。如果使用上面的结构
,则会出现编译错误:
类型“APContext”不符合协议“Encodable”
如果我简化查询,使定义变为:
let personnel = [Person]
然后它就起作用了
因此,我想我的问题可以归结为:我如何使
[(标题,人物)]
可编码?多亏了Leo的建议,我得到了一个解决方案:
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
现在可以传递到叶模板。唯一需要注意的是标记必须包括人员
结构中的字段名,例如每个人.姓
使用两个属性而不是tupleThanks@LeoDabus创建一个结构人员
。我用了你的建议——看看我的答案。
var enc: [Personnel] = []
for per in pers {
enc.append(Personnel(title:per.1,person:per.0))
}