Vapor 3 Fluent MySQL: экономия на модели добавляет 10 к auto_increment - PullRequest
0 голосов
/ 05 марта 2019

Когда я сохраняю свой объект в базе данных, он сохраняет идентификатор объекта с +10.Автоинкремент для таблицы увеличивается по умолчанию на 1. Когда я вручную что-то добавляю в базу данных, он увеличивается на 1.

Я пропускаю (или мою ошибку, настройку) параметр для FluentMySQL?

  func storeOrUpdateItemRecord(_ item: FetcherItem, store: Store, on conn: DatabaseConnectable) throws -> EventLoopFuture<Item> {
    guard let storeId = store.id else {
      throw Abort(.internalServerError)
    }

    let calendar = Calendar.current
    let fromDate = calendar.startOfDay(for: Date())
    guard let endDate = calendar.date(bySettingHour: 23, minute: 59, second: 59, of: Date()) else { throw Abort(.internalServerError) }

    return Item.query(on: conn)
      // Bunch of filters
      .filter(\.scheduledDate < endDate)
      .all()
      .flatMap(to: Flight.self) { flights in
        if var firstItem = flights.first {
          debugPrint("Found item, updating...")
          // Update a bunch of values
          return firstItem.save(on: conn)
        }

        debugPrint("Did not find item, saving new...")
        return item.toItem(forStore: store).save(on: conn)
    }
  }

Функция toItem не делает ничего, кроме как инициирует новый Item:

extension FetcherItem {

  func toItem(forStore store: Store) -> Item {
    return Item.init(
      id: nil,
      // Set a bunch of values
      actualDate: actualDateTime)
  }
}

Как видите, id имеет значение nil ...который я бы предположил, следует хранить с помощью null при выполнении запроса на вставку.

Результат в базе данных:

MySQL db result

Чего мне не хватает?

Обновление : После следующих предложений от этой страницы я добавил ведение журнала для запросов ... и они, кажется, работают так, как должны.Пример того, что свободно выполняется для запроса:

[mysql] [2019-03-06 08:49:44 +0000] INSERT INTO `Items` (`company`, `name`, `storeId`, [...] `scheduledDate`) VALUES (?, ?, ?, ?, ?, ?, ?, ?) [string("A company"), string("abc123"), integer8(1), [...] time(2019-3-6 16:25:0.0)]

Как видите, он не устанавливает id в любом случае.Может быть проблема с MySQL?

1 Ответ

0 голосов
/ 06 марта 2019

Нашел проблему.MySQL установил @@auto_increment_increment на 10, отсюда и скачок.

Более подробная информация здесь:

Если у вас возникла эта проблема, выполните следующую команду ( source ):

  • SELECT @@auto_increment_increment

и установитеэто:

  • SET @@auto_increment_increment=1

result

...