Vapor 3 Fluent MySQL: экономия на модели добавляет 10 к auto_increment
Когда я сохраняю свой объект в базе данных, он сохраняет идентификатор объекта с +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
func больше ничего не делает, потом инициирует новый 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] [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 ответ
Нашел проблему. MySQL установил @@auto_increment_increment
в 10
отсюда и прыжки.
Больше информации здесь:
- /questions/43675767/kolonka-avtoinkrementa-mysql-podskochila-na-10-pochemu/43675771#43675771
- https://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-handling.html
Если у вас есть эта проблема, выполните следующую команду ( источник):
SELECT @@auto_increment_increment
и установить его:
SET @@auto_increment_increment=1