Vapor fluent 不会因违反外键约束而抛出
Vapor fluent doesn't throw upon violating foreign key constraint
当我使用 create 将模型添加到数据库时,Vapor fluent 在违反其中一个外键时不会抛出异常。它也没有插入,创建函数只是 returns 正常。
这是 Vapor Fluent 的标准行为吗?
我将 Vapor 3 与 PostgreSQL 结合使用。
这是我添加外键约束的迁移:
struct AddAddressForeignKeys: Migration {
typealias Database = PostgreSQLDatabase
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
return PostgreSQLDatabase.update(Address.self, on: conn) { builder in
builder.reference(from: \.regionId, to: \CodeRegion.id)
builder.reference(from: \.countryId, to: \CodeCountry.id)
}
}
static func revert(on conn: PostgreSQLConnection) -> Future<Void> {
return PostgreSQLDatabase.update(Address.self, on: conn) { builder in
builder.deleteReference(from: \.regionId, to: \CodeRegion.id)
builder.deleteReference(from: \.countryId, to: \CodeCountry.id)
}
}
}
更新:我已经添加了 Jacob Relkin 的回答中提到的 enableReferences,但仍然没有抛出异常。 H
// Configure database
let config = PostgreSQLDatabaseConfig(hostname: "localhost", port: 5432, username: "postgres", database: "test", password: nil, transport: .cleartext)
let postgres = PostgreSQLDatabase(config: config)
// Register the configured database to the database config.
var databases = DatabasesConfig()
databases.add(database: postgres, as: .psql)
databases.enableReferences(on: .psql)
services.register(databases)
为了强制执行外键违规,您必须在设置 DatabasesConfig
时调用 enableReferences(on:)
。
当我使用 create 将模型添加到数据库时,Vapor fluent 在违反其中一个外键时不会抛出异常。它也没有插入,创建函数只是 returns 正常。
这是 Vapor Fluent 的标准行为吗?
我将 Vapor 3 与 PostgreSQL 结合使用。
这是我添加外键约束的迁移:
struct AddAddressForeignKeys: Migration {
typealias Database = PostgreSQLDatabase
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
return PostgreSQLDatabase.update(Address.self, on: conn) { builder in
builder.reference(from: \.regionId, to: \CodeRegion.id)
builder.reference(from: \.countryId, to: \CodeCountry.id)
}
}
static func revert(on conn: PostgreSQLConnection) -> Future<Void> {
return PostgreSQLDatabase.update(Address.self, on: conn) { builder in
builder.deleteReference(from: \.regionId, to: \CodeRegion.id)
builder.deleteReference(from: \.countryId, to: \CodeCountry.id)
}
}
}
更新:我已经添加了 Jacob Relkin 的回答中提到的 enableReferences,但仍然没有抛出异常。 H
// Configure database
let config = PostgreSQLDatabaseConfig(hostname: "localhost", port: 5432, username: "postgres", database: "test", password: nil, transport: .cleartext)
let postgres = PostgreSQLDatabase(config: config)
// Register the configured database to the database config.
var databases = DatabasesConfig()
databases.add(database: postgres, as: .psql)
databases.enableReferences(on: .psql)
services.register(databases)
为了强制执行外键违规,您必须在设置 DatabasesConfig
时调用 enableReferences(on:)
。