public function purge()
{
$classes = array();
foreach ($this->em->getMetadataFactory()->getAllMetadata() as $metadata) {
if (!$metadata->isMappedSuperclass && !(isset($metadata->isEmbeddedClass) && $metadata->isEmbeddedClass)) {
$classes[] = $metadata;
}
}
$commitOrder = $this->getCommitOrder($this->em, $classes);
// Get platform parameters
$platform = $this->em->getConnection()->getDatabasePlatform();
// Drop association tables first
$orderedTables = $this->getAssociationTables($commitOrder, $platform);
// Drop tables in reverse commit order
for ($i = count($commitOrder) - 1; $i >= 0; --$i) {
$class = $commitOrder[$i];
if (isset($class->isEmbeddedClass) && $class->isEmbeddedClass || $class->isMappedSuperclass || $class->isInheritanceTypeSingleTable() && $class->name !== $class->rootEntityName) {
continue;
}
$orderedTables[] = $this->getTableName($class, $platform);
}
$connection = $this->em->getConnection();
$filterExpr = $connection->getConfiguration()->getFilterSchemaAssetsExpression();
$emptyFilterExpression = empty($filterExpr);
foreach ($orderedTables as $tbl) {
if (($emptyFilterExpression || preg_match($filterExpr, $tbl)) && array_search($tbl, $this->excluded) === false) {
if ($this->purgeMode === self::PURGE_MODE_DELETE) {
$connection->executeUpdate("DELETE FROM " . $tbl);
} else {
$connection->executeUpdate($platform->getTruncateTableSQL($tbl, true));
}
}
}
}