1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
<?php
namespace App\TagBundle\EventListener;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
class DoctrineEventSubscriber implements EventSubscriber
{
/**
* @var array
*/
protected $targets;
/**
* @param array $targets
*/
public function __construct(array $targets = array())
{
$this->targets = $targets;
}
/**
* @param LoadClassMetadataEventArgs $event
*/
public function loadClassMetadata(LoadClassMetadataEventArgs $event)
{
/** @var \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetaData */
$classMetaData = $event->getClassMetadata();
if (in_array($classMetaData->getName(), $this->targets)) {
$className = explode('\\', $classMetaData->getName());
$tableName = strtolower($className[count($className) - 3] . '_' . $className[count($className) - 1]);
$classMetaData->mapManyToMany(
array(
'targetEntity' => 'App\\TagBundle\\Entity\\Tag',
'fieldName' => 'tags',
'joinTable' => array(
'name' => $tableName . 's_tags',
)
)
);
}
}
/**
* @return array
*/
public function getSubscribedEvents()
{
return array(
Events::loadClassMetadata
);
}
} |
Partager