【问题标题】:vapor - Obtaining data from mysql using alsodecode()vapor - 使用alsodecode() 从 mysql 获取数据
【发布时间】:2018-07-23 17:16:22
【问题描述】:

我正在尝试使用函数alsodecode() 从连接我的两个表(usuarios 和 colegios)的 mysql 数据库中获取数据。

我的代码如下所示:

func usuariosHandler(_ req: Request) throws -> Future<View> {
        return Usuario.query(on: req).join(\Colegio.id, to: \Usuario.colegioId).alsoDecode(Colegio.self).all().flatMap(to: View.self) { usuarios in
            let contexto = UsuariosContext(title: "Usuarios de la aplicación", usuarios: usuarios)
            return try req.view().render("usuarios", contexto)
        }
    }

问题是查询的结果是一个元组,我必须通过叶子发送到视图。此外,这是编译器的错误:无法将类型'[(Usuario,Colegio)]'的值转换为预期的参数类型'[Usuario]'

我是 Swift 和 Vapor 的初学者。有人可以帮我吗?

谢谢!

【问题讨论】:

    标签: fluent vapor


    【解决方案1】:

    您需要使用Encodable 结构来传递元组 - 一个结构用于保存元组数据,一个用于上下文:

    struct MyTuple: Encodable {
        let name: String // put the fields from the join in here
    }
    
    struct MyContext Encodable {
        let title: String
        let usuarios: [MyTuple]
    }
    
    Then modify your route to create the data structure to pass as the context:
    
    func usuariosHandler(_ req: Request) throws -> Future<View> {
        return Usuario.query(on: req).join(\Colegio.id, to: \Usuario.colegioId).alsoDecode(Colegio.self).all().flatMap(to: View.self) { usuarios in
            var usuariosTuples: [MyTuple] = []
            for usuario in usuarios {
                usuariosTuples.append( MyTuple( usuario.0 ) )
            } 
            let contexto = UsuariosContext(title: "Usuarios de la aplicación", usuarios: usuariosTuples)
            return try req.view().render("usuarios", contexto)
        }
    }
    

    我假设第一个字段是string

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2012-01-22
      • 2021-12-20
      相关资源
      最近更新 更多