700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Workaround for 1701 Cannot truncate a table referenced in a foreign key constraint using doctrine:

Workaround for 1701 Cannot truncate a table referenced in a foreign key constraint using doctrine:

时间:2019-07-25 05:32:04

相关推荐

Workaround for 1701 Cannot truncate a table referenced in a foreign key constraint using doctrine:

独角兽企业重金招聘Python工程师标准>>>

I've been following a BDD approach using Behat to develop a RESTful API on my current project and wanted to fully isolate the data base from feature to feature, so first I tried with:

/*** @BeforeFeature*/public static function beforeFeature(BeforeFeatureScope $scope){echo shell_exec('app/console doctrine:schema:drop --env=test --force');echo shell_exec('app/console doctrine:schema:create --env=test');echo shell_exec('app/console doctrine:fixtures:load --env=test -n');}

and it was pretty slow, in my case it was taking an average of1,5s...

Reading theDoctrineFixturesBundlehelp I found a nice--purge-with-truncateflag, but TA DAN, it was failing with this issue:/doctrine/data-fixtures/pull/127

Well, I solved it by replacing theMySqlPlatform::getTruncateTableSQLmethod like:

config_test.yml

doctrine:dbal:driver_class:Your\OwnBundle\DBAL\Driver...

src/Your/OwnBundle/DBAL/Driver.php

<?php

namespace Your\OwnBundle\DBAL;use Doctrine\DBAL\Driver\PDOMySql\Driver as BaseDriver;class Driver extends BaseDriver{/*** {@inheritdoc}*/public function getDatabasePlatform(){return new Platform();}}

src/Your/OwnBundle/DBAL/Platform.php

<?php

namespace Your\OwnBundle\DBAL;use Doctrine\DBAL\Platforms\MySqlPlatform;class Platform extends MySqlPlatform{/*** {@inheritdoc}*/public function getTruncateTableSQL($tableName, $cascade = false){return sprintf('SET foreign_key_checks = 0;TRUNCATE %s;SET foreign_key_checks = 1;', $tableName);}}

And finally:

/*** @BeforeFeature*/public static function beforeFeature(BeforeFeatureScope $scope){echo shell_exec('app/console doctrine:fixtures:load --env=test --purge-with-truncate -n');}

It's hacky, I know, but it does the job for the tests and cuts down the average time to0,4s.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。