代码之家  ›  专栏  ›  技术社区  ›  LinusGeffarth

Vapor连接到sqlite数据库

  •  1
  • LinusGeffarth  · 技术社区  · 5 年前

    我正在尝试用sqlite建立一个vapor 3项目。
    configure.swift 文件,我有以下与sqlite相关的设置:

    try services.register(FluentSQLiteProvider())
    
    ...
    
    // Get the root directory of the project
    // I have verified that the file is present at this path
    let path = DirectoryConfig.detect().workDir + "db_name.db"
    let sqlite: SQLiteDatabase
    do {
        sqlite = try SQLiteDatabase(storage: .file(path: path))
        print("connected") // called
    } catch {
        print(error) // not called
        return
    }
    
    var databases = DatabasesConfig()
    databases.add(database: sqlite, as: .sqlite)
    services.register(databases)
    

    在数据库中,我有一个名为 posts ,我要查询并返回以下位置的所有条目:

    database table

    这就是 Post 内部实现 /来源/应用程序/模型/ :

    final class Post: Content {
        var id: Int?
        var title: String
        var body: String
    
        init(id: Int? = nil, title: String, body: String) {
            self.id = id
            self.title = title
            self.body = body
        }
    }
    extension Post: SQLiteModel, Migration, Parameter { }
    

    我还添加了迁移到 快速配置 :

    var migrations = MigrationConfig()
    migrations.add(model: Post.self, database: .sqlite)
    services.register(migrations)
    

    routes.swift 我定义了 帖子 路线如下:

    router.get("posts") { req in
        return Post.query(on: req).all()
    }
    

    现在,打电话的时候 localhost:8080/posts 我得到:

    []
    

    我是否没有正确连接数据库?
    我错过什么了吗?

    1 回复  |  直到 5 年前
        1
  •  4
  •   Mukesh    5 年前

    Fluent生成的表名似乎与数据库表名不同,因为Fluent生成的表名与 Model 类名。以你为例 Post .

    添加静态属性 entity 在你的模型课上 定义自定义表名。

    这样地:

    public static var entity: String {
        return "posts"
    }
    
    推荐文章