Свободный пар не выбрасывается при нарушении ограничения внешнего ключа - PullRequest
2 голосов
/ 25 февраля 2020

Когда я добавляю модель в базу данных с помощью create, Vapor fluent не выдает исключение, когда один из внешних ключей нарушается. Он также не вставлен, функция создания просто возвращается как обычно.

Это стандартное поведение 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)
        }
    }
}

Обновление: я добавил enableReferences, как упомянуто в ответе Джейкоба Релкина, но все еще нет исключений. Н

// 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)

1 Ответ

2 голосов
/ 25 февраля 2020

Для того, чтобы принудить к нарушениям внешнего ключа, вы должны вызвать enableReferences(on:) на вашем DatabasesConfig при настройке.

...