【问题标题】:How to disable foreign keys constraints in postgresql during Laravel Testing如何在 Laravel 测试期间禁用 postgresql 中的外键约束
【发布时间】:2019-08-06 09:27:19
【问题描述】:

我对许多工厂进行了很多单元测试。但是由于外键的原因,我在每个测试中都需要更多的工厂。

是否可以在测试期间禁用外键?我尝试使用'foreign_key_constraints' => false,但没有效果。

    'pgsql_testing' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST_TESTING', '127.0.0.1'),
        'port' => env('DB_PORT_TESTING', '5432'),
        'database' => env('DB_DATABASE_TESTING', 'forge'),
        'username' => env('DB_USERNAME_TESTING', 'forge'),
        'password' => env('DB_PASSWORD_TESTING', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
        'foreign_key_constraints' => false, //does not help
    ],

我也尝试在 setUp 方法中使用 disableForeignKeyConstraints

    protected function setUp() : void
{
    parent::setUp();
    Schema::connection('pgsql_testing')->disableForeignKeyConstraints();
}

我使用 PostgreSQL 10.7 和 Laravel 5.8

【问题讨论】:

    标签: laravel postgresql testing laravel-5.8


    【解决方案1】:

    带有 PostgreSQL 驱动程序的disableForeignKeyConstraints(); 函数将此命令发送到数据库服务器:

    SET CONSTRAINTS ALL DEFERRED;
    

    根据Postgresql docs DEFERRED constraints 不会在每个语句中进行检查,但在事务提交时仍会对其进行检查,因此仍会对其进行检查。

    我认为调用disableForeignKeyConstraints() 函数并不是您想要的确切行为。

    但是你可以检查this question,如果它可以帮助你在 postgreSQL 中禁用外键约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2018-05-29
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多