首页 > 解决方案 > Symfony4:具有外键和截断/重置自动增量值的 DataFixtures

问题描述

我尝试使用 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,
    ];
}

我错过了什么还是它从来没有工作过?

是否有其他选项可以重置自动增量值?

标签: foreign-keyssymfony4

解决方案


据我所知,没有解决方案。我找到了一个不为测试值引用某个 id 的解决方案。DataFixtures 使您可以创建“命名”值,您可以在其他夹具中引用这些值。

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

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


推荐阅读