mirror of
https://github.com/wallabag/wallabag.git
synced 2025-07-17 17:08:37 +00:00
48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Wallabag\CoreBundle\Subscriber;
|
||
|
|
||
|
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
|
||
|
use Doctrine\Common\EventSubscriber;
|
||
|
use Doctrine\ORM\Mapping\ClassMetadataInfo;
|
||
|
|
||
|
/**
|
||
|
* Puts a prefix to each table.
|
||
|
*
|
||
|
* Solution from :
|
||
|
* - http://stackoverflow.com/a/23860613/569101
|
||
|
* - http://doctrine-orm.readthedocs.org/en/latest/reference/namingstrategy.html
|
||
|
*/
|
||
|
class TablePrefixSubscriber implements EventSubscriber
|
||
|
{
|
||
|
protected $prefix = '';
|
||
|
|
||
|
public function __construct($prefix)
|
||
|
{
|
||
|
$this->prefix = (string) $prefix;
|
||
|
}
|
||
|
|
||
|
public function getSubscribedEvents()
|
||
|
{
|
||
|
return array('loadClassMetadata');
|
||
|
}
|
||
|
|
||
|
public function loadClassMetadata(LoadClassMetadataEventArgs $args)
|
||
|
{
|
||
|
$classMetadata = $args->getClassMetadata();
|
||
|
// if we are in an inheritance hierarchy, only apply this once
|
||
|
if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$classMetadata->setTableName($this->prefix . $classMetadata->getTableName());
|
||
|
|
||
|
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
|
||
|
if ($mapping['type'] === ClassMetadataInfo::MANY_TO_MANY && isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])) {
|
||
|
$mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
|
||
|
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|