Symfony4:具有外键并截断/重置自动增量值的DataFixtures

时间:2018-06-29 14:42:14

标签: foreign-keys symfony4

我尝试使用symfony各自的教义DataFixture功能生成数据库数据。

如果我这样做多次加载数据:

php bin/console doctrine:fixtures:load

它确实清空我的数据库并重新生成数据。但是,它不会使自动递增值变回原值。 如果我使用选项--purge-with-truncate来运行此命令,它将执行此操作,但是我会抱怨我的外键约束:

    $ php bin/console doctrine:fixtures:load --env=test -n --purge-with-truncate
> purging database

In AbstractMySQLDriver.php line 68:

An exception occurred while executing 'TRUNCATE property':

SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint (`my_db_name`.`user_property`, CONSTRAINT `fk_property_name` FOREIGN KEY (`propert
y_name`) REFERENCES `my_db_name`.`property` (`name`))

所以是的,当我在三个不同的类中创建固定装置时,我当然添加了依赖项。实体UserProperty取决于用户和属性。

因此,我通过在UserPropertyFixtures类中添加以下方法来实现DependentFixtureInterface:

public function getDependencies()
{
    return [
        UserFixtures::class,
        PropertyFixtures::class,
    ];
}

我丢失了什么东西还是永远无法工作?

还有其他选项可以重置自动增量值吗?

1 个答案:

答案 0 :(得分:0)

据我所知,这还没有解决方案。 我找到了一种解决方案,该解决方案不使用特定ID作为测试值。 DataFixtures使您可以创建“命名”值,您可以在其他Fixture中引用这些值。

但是,如果要截断表并使用外键,则必须按正确的顺序手动执行DROP和CREATE。 不好。...

如果有人仍然有解决方案,我仍然会感兴趣。