【问题标题】:Can I use straight SQL to get the number of rows in a table using Fluent (Vapor)?我可以使用直接 SQL 来获取使用 Fluent (Vapor) 的表中的行数吗?
【发布时间】:2017-04-11 03:41:02
【问题描述】:

我想这样做SELECT COUNT(column_name) FROM table_name; 来取回一个 Int 并将其作为响应的一部分返回。我不想为了获得计数而将每个对象都加载到内存中;像这样:User.query().all().count

请告诉我这可以通过 Fluent 实现! :)

【问题讨论】:

    标签: swift postgresql fluent vapor


    【解决方案1】:

    raw 方法是可能的。这里有 MySQL 的示例

    guard let mysql = drop.database?.driver as? MySQLDriver else {
        return
    }
    
    let count = try mysql.raw("SELECT COUNT(column_name) FROM table_name")
    

    另外,每个驱动都必须实现raw方法

    public protocol Driver {
        var idKey: String { get }
        func query<T: Entity>(_ query: Query<T>) throws -> Node
        func schema(_ schema: Schema) throws
        func raw(_ raw: String, _ values: [Node]) throws -> Node
    }
    

    【讨论】:

    • 哇,这太棒了!谢谢!我会仔细看看,但我只是转换为我想要的类型吗?还是会返回一些 SQLResult 类型?还是别的什么?
    • 你得到了和query()方法一样的结果,这个内部类型是Node。
    • 另外,如果我的回答有帮助,请将问题标记为已解决
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2022-01-19
    • 2017-02-10
    相关资源
    最近更新 更多