3 namespace Wallabag\CoreBundle\Subscriber
;
5 use Doctrine\ORM\Event\LoadClassMetadataEventArgs
;
6 use Doctrine\Common\EventSubscriber
;
7 use Doctrine\ORM\Mapping\ClassMetadataInfo
;
10 * Puts a prefix to each table.
13 * - http://stackoverflow.com/a/23860613/569101
14 * - http://doctrine-orm.readthedocs.org/en/latest/reference/namingstrategy.html
16 class TablePrefixSubscriber
implements EventSubscriber
18 protected $prefix = '';
20 public function __construct($prefix)
22 $this->prefix
= (string) $prefix;
25 public function getSubscribedEvents()
27 return array('loadClassMetadata');
30 public function loadClassMetadata(LoadClassMetadataEventArgs
$args)
32 $classMetadata = $args->getClassMetadata();
33 // if we are in an inheritance hierarchy, only apply this once
34 if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
38 $classMetadata->setTableName($this->prefix
. $classMetadata->getTableName());
40 foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
41 if ($mapping['type'] === ClassMetadataInfo
::MANY_TO_MANY
&& isset($classMetadata->associationMappings
[$fieldName]['joinTable']['name'])) {
42 $mappedTableName = $classMetadata->associationMappings
[$fieldName]['joinTable']['name'];
43 $classMetadata->associationMappings
[$fieldName]['joinTable']['name'] = $this->prefix
. $mappedTableName;