fixtures done

This commit is contained in:
Olivier PARPAILLON
2024-11-27 10:30:26 +01:00
parent 266a338b24
commit 6d238f8d85
11 changed files with 271 additions and 67 deletions

35
src/Purger/MyPurger.php Normal file
View File

@@ -0,0 +1,35 @@
<?php
namespace App\Purger;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\ORM\EntityManagerInterface;
class MyPurger extends ORMPurger
{
/**
* {@inheritDoc}
*/
public function __construct(private readonly EntityManagerInterface $entityManager, array $excluded = [])
{
parent::__construct($this->entityManager, $excluded);
}
/**
* Purges the MySQL database with temporarily disabled foreign key checks.
*
* {@inheritDoc}
*/
public function purge(): void
{
$connection = $this->entityManager->getConnection();
try {
$connection->executeStatement('SET FOREIGN_KEY_CHECKS = 0');
parent::purge();
} finally {
$connection->executeStatement('SET FOREIGN_KEY_CHECKS = 1');
}
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Purger;
use Doctrine\Bundle\FixturesBundle\Purger\PurgerFactory;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\DataFixtures\Purger\PurgerInterface;
use Doctrine\ORM\EntityManagerInterface;
class MyPurgerFactory implements PurgerFactory
{
/**
* Adapted from {@see \Doctrine\Bundle\FixturesBundle\Purger\ORMPurgerFactory} to return a MySQL-specific {@see PurgerInterface}.
*
* {@inheritDoc}
*/
public function createForEntityManager(
?string $emName,
EntityManagerInterface $em,
array $excluded = [],
bool $purgeWithTruncate = false
): PurgerInterface {
$purger = new MyPurger($em, $excluded);
$purger->setPurgeMode($purgeWithTruncate ? ORMPurger::PURGE_MODE_TRUNCATE : ORMPurger::PURGE_MODE_DELETE);
return $purger;
}
}