diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 50e9cff7..7c55b1bb 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_doctrine.xml.dist b/phpunit_doctrine.xml.dist
index 65bdb26e..6cd3fa98 100644
--- a/phpunit_doctrine.xml.dist
+++ b/phpunit_doctrine.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_doctrine_mongodb.xml.dist b/phpunit_doctrine_mongodb.xml.dist
index 6dc605cd..85f63796 100644
--- a/phpunit_doctrine_mongodb.xml.dist
+++ b/phpunit_doctrine_mongodb.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_doctrine_phpcr.xml.dist b/phpunit_doctrine_phpcr.xml.dist
index 9f530be0..a3edd629 100644
--- a/phpunit_doctrine_phpcr.xml.dist
+++ b/phpunit_doctrine_phpcr.xml.dist
@@ -21,7 +21,7 @@
verbose="true">
-
+
diff --git a/phpunit_eloquent.xml.dist b/phpunit_eloquent.xml.dist
index 3ff3eca6..c3080884 100644
--- a/phpunit_eloquent.xml.dist
+++ b/phpunit_eloquent.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_propel2.xml.dist b/phpunit_propel2.xml.dist
index 153ec495..772bbf7c 100644
--- a/phpunit_propel2.xml.dist
+++ b/phpunit_propel2.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_symfony.xml.dist b/phpunit_symfony.xml.dist
index 1c0ef465..c9a9b629 100644
--- a/phpunit_symfony.xml.dist
+++ b/phpunit_symfony.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_symfony_doctrine.xml.dist b/phpunit_symfony_doctrine.xml.dist
index 6dcaa4be..1802b503 100644
--- a/phpunit_symfony_doctrine.xml.dist
+++ b/phpunit_symfony_doctrine.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_symfony_eloquent.xml.dist b/phpunit_symfony_eloquent.xml.dist
index ba7c29f2..8eeac6e9 100644
--- a/phpunit_symfony_eloquent.xml.dist
+++ b/phpunit_symfony_eloquent.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_symfony_proxy_manager_with_doctrine.xml.dist b/phpunit_symfony_proxy_manager_with_doctrine.xml.dist
index 0209d389..0c1da2d4 100644
--- a/phpunit_symfony_proxy_manager_with_doctrine.xml.dist
+++ b/phpunit_symfony_proxy_manager_with_doctrine.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/phpunit_symfony_proxy_manager_with_eloquent.xml.dist b/phpunit_symfony_proxy_manager_with_eloquent.xml.dist
index f8447a5b..e8e8ed88 100644
--- a/phpunit_symfony_proxy_manager_with_eloquent.xml.dist
+++ b/phpunit_symfony_proxy_manager_with_eloquent.xml.dist
@@ -20,7 +20,7 @@
verbose="true">
-
+
diff --git a/src/Bridge/Doctrine/Purger/Purger.php b/src/Bridge/Doctrine/Purger/Purger.php
index da53aed7..c7fde27d 100644
--- a/src/Bridge/Doctrine/Purger/Purger.php
+++ b/src/Bridge/Doctrine/Purger/Purger.php
@@ -91,17 +91,17 @@ public function create(PurgeMode $mode, PurgerInterface $purger = null): PurgerI
*/
public function purge()
{
- // Because MySQL rocks, you got to disable foreign key checks when doing a TRUNCATE unlike in for example
+ // Because MySQL rocks, you got to disable foreign key checks when doing a TRUNCATE/DELETE unlike in for example
// PostgreSQL. This ideally should be done in the Purger of doctrine/data-fixtures but meanwhile we are doing
// it here.
// See the progress in https://github.com/doctrine/data-fixtures/pull/272
- $truncateOrm = (
+ $disableFkChecks = (
$this->purger instanceof DoctrineOrmPurger
- && PurgeMode::createTruncateMode()->getValue() === $this->purgeMode->getValue()
+ && in_array($this->purgeMode->getValue(), [PurgeMode::createDeleteMode()->getValue(), PurgeMode::createTruncateMode()->getValue()])
&& $this->purger->getObjectManager()->getConnection()->getDriver() instanceof AbstractMySQLDriver
);
- if ($truncateOrm) {
+ if ($disableFkChecks) {
$connection = $this->purger->getObjectManager()->getConnection();
$connection->exec('SET FOREIGN_KEY_CHECKS = 0;');
@@ -109,7 +109,7 @@ public function purge()
$this->purger->purge();
- if ($truncateOrm && isset($connection)) {
+ if ($disableFkChecks && isset($connection)) {
$connection->exec('SET FOREIGN_KEY_CHECKS = 1;');
}
}
diff --git a/tests/Bridge/Doctrine/Purger/PurgerTest.php b/tests/Bridge/Doctrine/Purger/PurgerTest.php
index 77e49b81..ff8e0fcb 100644
--- a/tests/Bridge/Doctrine/Purger/PurgerTest.php
+++ b/tests/Bridge/Doctrine/Purger/PurgerTest.php
@@ -14,6 +14,8 @@
namespace Fidry\AliceDataFixtures\Bridge\Doctrine\Purger;
use Doctrine\Common\DataFixtures\Purger\ORMPurger as DoctrineOrmPurger;
+use Doctrine\DBAL\Driver\AbstractMySQLDriver;
+use Doctrine\DBAL\Connection;
use Doctrine\ORM\EntityManager;
use Fidry\AliceDataFixtures\Bridge\Doctrine\Entity\Dummy;
use Fidry\AliceDataFixtures\Bridge\Doctrine\ORM\FakeEntityManager;
@@ -59,6 +61,30 @@ public function testCreatesADoctrineOrmPurgerWithTheAppropriateManagerAndPurgeMo
$this->assertEquals(DoctrineOrmPurger::PURGE_MODE_TRUNCATE, $decoratedPurger->getPurgeMode());
}
+ public function testDisableFKChecksOnDeleteIsPerformed()
+ {
+ $connection = $this->prophesize(Connection::class);
+ $connection->getDriver()->willReturn($this->prophesize(AbstractMySQLDriver::class)->reveal());
+ $connection->exec('SET FOREIGN_KEY_CHECKS = 0;')->shouldBeCalled();
+ $connection->exec('SET FOREIGN_KEY_CHECKS = 1;')->shouldBeCalled();
+
+ $manager = $this->prophesize(EntityManager::class);
+ $manager->getConnection()->willReturn($connection->reveal());
+
+ $purgerORM = $this->prophesize(DoctrineOrmPurger::class);
+ $purgerORM->getObjectManager()->willReturn($manager->reveal());
+ $purgerORM->purge()->shouldBeCalled();
+
+ $purgeMode = PurgeMode::createDeleteMode();
+ $purger = new Purger($manager->reveal(), $purgeMode);
+
+ $decoratedPurgerReflection = (new \ReflectionObject($purger))->getProperty('purger');
+ $decoratedPurgerReflection->setAccessible(true);
+ $decoratedPurgerReflection->setValue($purger, $purgerORM->reveal());
+
+ $purger->purge();
+ }
+
public function testEmptyDatabase()
{
/** @var EntityManager $manager */
diff --git a/vendor-bin/proxy-manager/composer.json b/vendor-bin/proxy-manager/composer.json
index 5227720c..aa141d0c 100644
--- a/vendor-bin/proxy-manager/composer.json
+++ b/vendor-bin/proxy-manager/composer.json
@@ -14,7 +14,7 @@
"doctrine/phpcr-bundle": "^1.0",
"doctrine/phpcr-odm": "^1.4",
"jackalope/jackalope-doctrine-dbal": "^1.2",
- "ocramius/proxy-manager": "^2.0.2",
+ "ocramius/proxy-manager": "^2.0.2, < 2.2.0",
"psy/psysh": "^0.6",
"symfony/symfony": "^3.4 || ^4.0",
"theofidry/composer-inheritance-plugin": "^1.0",