Как запросить базу данных при загрузке? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь запланировать запрос случайного элемента каждую минуту в моей базе данных.

Часть расписания работает, но я не могу выбрать элемент из базы данных ...

Я быстрый новичок.Может быть, я пропустил что-то важное!

Дайте мне знать, если вам нужна дополнительная информация

Это мой код из boot.swift

import Fluent
import FluentSQLite

func foo(on container: Container) {
    let future = container.withPooledConnection(to: .sqlite) { db in
        return Future.map(on: container){ }
    }
    future.do{ msg in

        let allQuotes = QuoteOfTheDay.query(on: ).all().wait()
        quoteOfTheDay = allQuotes.randomElement()

        }.catch{ error in
            print("\(error.localizedDescription)")
    }
}

/// Called after your application has initialized.
public func boot(_ app: Application) throws {
    // your code here

    func runRepeatTimer() {

        app.eventLoop.scheduleTask(in: TimeAmount.minutes(1), runRepeatTimer)
        foo(on: app)
    }

    runRepeatTimer()

}


Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

На основе вашего кода вы можете запрашивать элементы из вашей базы данных во время загрузки через:

          let req = Request(using: app)
          let allQuotes = QuoteOfTheDay.query(on: req).all().wait()
          quoteOfTheDay = allQuotes.randomElement()

Кроме того, для повторного задания каждые 24 часа вы можете использовать.

          app.eventLoop.scheduleRepeatedTask(initialDelay: TimeAmount.seconds(0), delay: TimeAmount.hours(24), foo(on: app))
0 голосов
/ 22 января 2019

Application соответствует Container, поэтому вы можете позвонить в boot(_:) и просто предоставить приложение

...