Vapor подключиться к базе данных SQLite - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь настроить проект Vapor 3 с SQLite.
В файле 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 внутри / Sources / App / Models / :

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 { }

Я также добавил миграцию в configure.swift:

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

В routes.swift я определяю маршрут posts следующим образом:

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

Теперь при звонке localhost:8080/posts я получаю:

[]

Не правильно ли я подключил базу данных?
Я что-то пропустил?

1 Ответ

0 голосов
/ 21 января 2019

Кажется, что имя таблицы, сгенерированное fluent, отличается от имени вашей таблицы базы данных, так как Fluent генерирует таблицу с именем, совпадающим с именем класса Model.В вашем случае Post.

Добавьте статическое свойство entity в класс вашей модели Post, чтобы определить имя пользовательской таблицы.

, например:

public static var entity: String {
    return "posts"
}
...