Vapor 3 Fluent MySQL:节省模型将 10 添加到 auto_increment
Vapor 3 Fluent MySQL: save on model adds 10 to auto_increment
当我将我的对象保存到数据库时,它存储对象的 ID +10。 table 的自动增量默认以 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
进行存储。
数据库中的结果:
我错过了什么?
更新:
在遵循 的建议后,我为查询添加了日志记录......它们似乎可以正常工作。
fluent 运行查询的示例:
[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 问题?
找到问题了。 MySQL 已将 @@auto_increment_increment
设置为 10
,因此跳转。
更多信息在这里:
如果你有这个问题,运行下面的命令():
SELECT @@auto_increment_increment
并设置它:
SET @@auto_increment_increment=1
当我将我的对象保存到数据库时,它存储对象的 ID +10。 table 的自动增量默认以 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 问题?
找到问题了。 MySQL 已将 @@auto_increment_increment
设置为 10
,因此跳转。
更多信息在这里:
如果你有这个问题,运行下面的命令(
SELECT @@auto_increment_increment
并设置它:
SET @@auto_increment_increment=1