123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <?php
- namespace Base\OAuthBundle\EventListener;
- use Doctrine\ORM\Events;
- use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
- use Doctrine\Common\EventSubscriber;
- class DynamicRelationSubscriber implements EventSubscriber
- {
- /**
- * {@inheritDoc}
- */
- public function getSubscribedEvents()
- {
- return array(
- Events::loadClassMetadata,
- );
- }
- /**
- * @param LoadClassMetadataEventArgs $eventArgs
- */
- public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
- {
- // the $metadata is the whole mapping info for this class
- $metadata = $eventArgs->getClassMetadata();
- $classes = array(
- 'Base\OAuthBundle\Entity\AccessToken',
- 'Base\OAuthBundle\Entity\AuthCode',
- 'Base\OAuthBundle\Entity\RefreshToken'
- );
-
- if (!in_array($metadata->getName(), $classes)) {
- return;
- }
- $namingStrategy = $eventArgs
- ->getEntityManager()
- ->getConfiguration()
- ->getNamingStrategy()
- ;
-
- $userClass = 'Base\UserBundle\Entity\User';
- $OAuthUserClass = '\Base\OAuthBundle\Security\Core\User\CustomOAuthUser';
-
- $metadata->mapManyToMany(array(
- 'targetEntity' => class_exists($userClass) ? $userClass : $OAuthUserClass,
- 'fieldName' => 'user',
- 'cascade' => array('persist'),
- 'joinTable' => array(
- 'name' => strtolower($namingStrategy->classToTableName($metadata->getName())) . '_user',
- 'joinColumns' => array(
- array(
- 'name' => $namingStrategy->joinKeyColumnName($metadata->getName()),
- 'referencedColumnName' => $namingStrategy->referenceColumnName(),
- 'onDelete' => 'CASCADE',
- 'onUpdate' => 'CASCADE',
- ),
- ),
- 'inverseJoinColumns' => array(
- array(
- 'name' => 'user_id',
- 'referencedColumnName' => $namingStrategy->referenceColumnName(),
- 'onDelete' => 'CASCADE',
- 'onUpdate' => 'CASCADE',
- ),
- )
- )
- ));
- }
- }
|