Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Test\DoctrineExtensions; | |
| use Doctrine\ORM\Event\LoadClassMetadataEventArgs; | |
| use Doctrine\ORM\Mapping\ClassMetadataInfo; | |
| class TablePrefix | |
| { | |
| /** | |
| * @var string | |
| */ | |
| protected $prefix = ''; | |
| /** | |
| * @param string $prefix | |
| */ | |
| public function __construct($prefix) | |
| { | |
| $this->prefix = (string) $prefix; | |
| } | |
| public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void | |
| { | |
| /** @var ClassMetadataInfo $classMetadata */ | |
| $classMetadata = $eventArgs->getClassMetadata(); | |
| if (!$classMetadata->isInheritanceTypeSingleTable() || $classMetadata->getName() === $classMetadata->rootEntityName) { | |
| $table = $classMetadata->table; | |
| $this->addPrefixToIndexes($this->prefix, $table, 'indexes'); | |
| $this->addPrefixToIndexes($this->prefix, $table, 'uniqueConstraints'); | |
| $classMetadata->setPrimaryTable($table); | |
| } | |
| } | |
| private function addPrefixToIndexes($prefix, array &$table, $key): void | |
| { | |
| if (!isset($table[$key])) { | |
| return; | |
| } | |
| $indexes = &$table[$key]; | |
| $newIndexes = []; | |
| foreach ($indexes as $name => $index) { | |
| $newName = uniqid($prefix.$name); | |
| $newIndexes[$newName] = $index; | |
| } | |
| $table[$key] = $newIndexes; | |
| } | |
| } | |