From e62536ae99cc0a340c59d38233ef7a4e166776c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Wed, 24 Sep 2014 12:47:04 +0200 Subject: [PATCH 1/7] bump branch-alias version --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f4a32d13..b09de77a 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } } } From 5557f261ef4fc8c5802b793da9b97ba98a1fbc03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Thu, 25 Sep 2014 16:26:13 +0200 Subject: [PATCH 2/7] add missing subscriber for the tree trait --- config/orm-services.yml | 12 +++ src/Model/Tree/Node.php | 5 -- src/ORM/Tree/TreeSubscriber.php | 78 +++++++++++++++++++ .../DoctrineBehaviors/ORM/Tree/NodeTest.php | 18 +++++ 4 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/ORM/Tree/TreeSubscriber.php diff --git a/config/orm-services.yml b/config/orm-services.yml index b0ad35e9..51157a28 100644 --- a/config/orm-services.yml +++ b/config/orm-services.yml @@ -21,6 +21,8 @@ parameters: knp.doctrine_behaviors.geocodable_subscriber.geocodable_trait: Knp\DoctrineBehaviors\Model\Geocodable\Geocodable knp.doctrine_behaviors.sluggable_subscriber.class: Knp\DoctrineBehaviors\ORM\Sluggable\SluggableSubscriber knp.doctrine_behaviors.sluggable_subscriber.sluggable_trait: Knp\DoctrineBehaviors\Model\Sluggable\Sluggable + knp.doctrine_behaviors.tree_subscriber.class: Knp\DoctrineBehaviors\ORM\Tree\TreeSubscriber + knp.doctrine_behaviors.tree_subscriber.tree_trait: Knp\DoctrineBehaviors\ORM\Tree\Tree services: knp.doctrine_behaviors.reflection.class_analyzer: @@ -67,6 +69,16 @@ services: tags: - { name: doctrine.event_subscriber } + knp.doctrine_behaviors.tree_subscriber: + class: "%knp.doctrine_behaviors.tree_subscriber.class%" + public: false + arguments: + - "@knp.doctrine_behaviors.reflection.class_analyzer" + - "%knp.doctrine_behaviors.reflection.is_recursive%" + - "%knp.doctrine_behaviors.tree_subscriber.tree_trait%" + tags: + - { name: doctrine.event_subscriber } + knp.doctrine_behaviors.blameable_subscriber: class: "%knp.doctrine_behaviors.blameable_subscriber.class%" arguments: diff --git a/src/Model/Tree/Node.php b/src/Model/Tree/Node.php index 6717e852..1df2db2a 100644 --- a/src/Model/Tree/Node.php +++ b/src/Model/Tree/Node.php @@ -31,11 +31,6 @@ trait Node */ private $parentNode; - /** - * @var string $materializedPath - * - * @ORM\Column(type="string", length=255) - */ protected $materializedPath = ''; /** diff --git a/src/ORM/Tree/TreeSubscriber.php b/src/ORM/Tree/TreeSubscriber.php new file mode 100644 index 00000000..df55421b --- /dev/null +++ b/src/ORM/Tree/TreeSubscriber.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Knp\DoctrineBehaviors\ORM\Tree; + +use Knp\DoctrineBehaviors\Reflection\ClassAnalyzer; + +use Knp\DoctrineBehaviors\ORM\AbstractSubscriber; + +use Doctrine\ORM\Event\LoadClassMetadataEventArgs, + Doctrine\ORM\Events, + Doctrine\ORM\Mapping\ClassMetadata; + +/** + * Tree subscriber. + * + * Adds mapping to the tree entities. + */ +class TreeSubscriber extends AbstractSubscriber +{ + private $nodeTrait; + + public function __construct(ClassAnalyzer $classAnalyzer, $isRecursive, $nodeTrait) + { + parent::__construct($classAnalyzer, $isRecursive); + + $this->nodeTrait = $nodeTrait; + } + + public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) + { + $classMetadata = $eventArgs->getClassMetadata(); + + if (null === $classMetadata->reflClass) { + return; + } + + if ($this->isTreeNode($classMetadata)) { + + if (!$classMetadata->hasField('materializedPath')) { + $classMetadata->mapField(array( + 'fieldName' => 'materializedPath', + 'type' => 'string', + 'length' => 255 + )); + } + } + } + + public function getSubscribedEvents() + { + return [Events::loadClassMetadata]; + } + + /** + * Checks if entity is a tree + * + * @param ClassMetadata $classMetadata The metadata + * + * @return Boolean + */ + private function isTreeNode(ClassMetadata $classMetadata) + { + return $this->getClassAnalyzer()->hasTrait( + $classMetadata->reflClass, + $this->nodeTrait, + $this->isRecursive + ); + } +} diff --git a/tests/Knp/DoctrineBehaviors/ORM/Tree/NodeTest.php b/tests/Knp/DoctrineBehaviors/ORM/Tree/NodeTest.php index 10ce6c0e..b2124d52 100644 --- a/tests/Knp/DoctrineBehaviors/ORM/Tree/NodeTest.php +++ b/tests/Knp/DoctrineBehaviors/ORM/Tree/NodeTest.php @@ -5,6 +5,9 @@ use Knp\DoctrineBehaviors\Model\Tree\NodeInterface; use Tests\Knp\DoctrineBehaviors\ORM\EntityManagerProvider; use BehaviorFixtures\ORM\TreeNodeEntity; +use Knp\DoctrineBehaviors\ORM\Tree\TreeSubscriber; +use Knp\DoctrineBehaviors\Reflection\ClassAnalyzer; +use Doctrine\Common\EventManager; require_once __DIR__.'/../EntityManagerProvider.php'; @@ -19,6 +22,21 @@ protected function getUsedEntityFixtures() ); } + protected function getEventManager() + { + $em = new EventManager; + + $em->addEventSubscriber( + new TreeSubscriber( + new ClassAnalyzer(), + false, + 'Knp\DoctrineBehaviors\Model\Tree\Node' + ) + ); + + return $em; + } + protected function buildNode(array $values = array()) { $node = new TreeNodeEntity; From 1e0e9f62727d0ffe11d7f65d6c8048fb09e07444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Fri, 26 Sep 2014 19:27:26 +0200 Subject: [PATCH 3/7] add missing sortable mapping --- config/orm-services.yml | 12 ++++ src/Model/Sortable/Sortable.php | 3 - src/ORM/Sortable/SortableSubscriber.php | 77 +++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 src/ORM/Sortable/SortableSubscriber.php diff --git a/config/orm-services.yml b/config/orm-services.yml index 51157a28..02f96801 100644 --- a/config/orm-services.yml +++ b/config/orm-services.yml @@ -23,6 +23,8 @@ parameters: knp.doctrine_behaviors.sluggable_subscriber.sluggable_trait: Knp\DoctrineBehaviors\Model\Sluggable\Sluggable knp.doctrine_behaviors.tree_subscriber.class: Knp\DoctrineBehaviors\ORM\Tree\TreeSubscriber knp.doctrine_behaviors.tree_subscriber.tree_trait: Knp\DoctrineBehaviors\ORM\Tree\Tree + knp.doctrine_behaviors.sortable_subscriber.class: Knp\DoctrineBehaviors\ORM\Sortable\SortableSubscriber + knp.doctrine_behaviors.sortable_subscriber.sortable_trait: Knp\DoctrineBehaviors\ORM\Sortable\Sortable services: knp.doctrine_behaviors.reflection.class_analyzer: @@ -79,6 +81,16 @@ services: tags: - { name: doctrine.event_subscriber } + knp.doctrine_behaviors.sortable_subscriber: + class: "%knp.doctrine_behaviors.sortable_subscriber.class%" + public: false + arguments: + - "@knp.doctrine_behaviors.reflection.class_analyzer" + - "%knp.doctrine_behaviors.reflection.is_recursive%" + - "%knp.doctrine_behaviors.sortable_subscriber.sortable_trait%" + tags: + - { name: doctrine.event_subscriber } + knp.doctrine_behaviors.blameable_subscriber: class: "%knp.doctrine_behaviors.blameable_subscriber.class%" arguments: diff --git a/src/Model/Sortable/Sortable.php b/src/Model/Sortable/Sortable.php index 7f158b23..064466ee 100644 --- a/src/Model/Sortable/Sortable.php +++ b/src/Model/Sortable/Sortable.php @@ -4,9 +4,6 @@ trait Sortable { - /** - * @ORM\Column(type="integer") - */ protected $sort = 1; private $reordered = false; diff --git a/src/ORM/Sortable/SortableSubscriber.php b/src/ORM/Sortable/SortableSubscriber.php new file mode 100644 index 00000000..427713c9 --- /dev/null +++ b/src/ORM/Sortable/SortableSubscriber.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Knp\DoctrineBehaviors\ORM\Sortable; + +use Knp\DoctrineBehaviors\Reflection\ClassAnalyzer; + +use Knp\DoctrineBehaviors\ORM\AbstractSubscriber; + +use Doctrine\ORM\Event\LoadClassMetadataEventArgs, + Doctrine\ORM\Events, + Doctrine\ORM\Mapping\ClassMetadata; + +/** + * Sortable subscriber. + * + * Adds mapping to the sortable entities. + */ +class SortableSubscriber extends AbstractSubscriber +{ + private $sortableTrait; + + public function __construct(ClassAnalyzer $classAnalyzer, $isRecursive, $sortableTrait) + { + parent::__construct($classAnalyzer, $isRecursive); + + $this->sortableTrait = $sortableTrait; + } + + public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) + { + $classMetadata = $eventArgs->getClassMetadata(); + + if (null === $classMetadata->reflClass) { + return; + } + + if ($this->isSortable($classMetadata)) { + + if (!$classMetadata->hasField('sort')) { + $classMetadata->mapField(array( + 'fieldName' => 'sort', + 'type' => 'integer' + )); + } + } + } + + public function getSubscribedEvents() + { + return [Events::loadClassMetadata]; + } + + /** + * Checks if entity is a sortable + * + * @param ClassMetadata $classMetadata The metadata + * + * @return Boolean + */ + private function isSortable(ClassMetadata $classMetadata) + { + return $this->getClassAnalyzer()->hasTrait( + $classMetadata->reflClass, + $this->sortableTrait, + $this->isRecursive + ); + } +} From cda61e8556e4bab2d8596c63456114480804eb8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Fri, 26 Sep 2014 20:24:28 +0200 Subject: [PATCH 4/7] add missing translatable mapping --- src/Model/Translatable/TranslationProperties.php | 3 --- src/ORM/Translatable/TranslatableSubscriber.php | 8 ++++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Model/Translatable/TranslationProperties.php b/src/Model/Translatable/TranslationProperties.php index f779cfdc..39094781 100644 --- a/src/Model/Translatable/TranslationProperties.php +++ b/src/Model/Translatable/TranslationProperties.php @@ -25,9 +25,6 @@ trait TranslationProperties */ protected $id; - /** - * @ORM\Column(type="string") - */ protected $locale; /** diff --git a/src/ORM/Translatable/TranslatableSubscriber.php b/src/ORM/Translatable/TranslatableSubscriber.php index ba418031..3f5c6212 100644 --- a/src/ORM/Translatable/TranslatableSubscriber.php +++ b/src/ORM/Translatable/TranslatableSubscriber.php @@ -109,6 +109,14 @@ private function mapTranslation(ClassMetadata $classMetadata) ]], ]); } + + if (!$classMetadata->hasField('locale')) { + $classMetadata->mapField(array( + 'fieldName' => 'locale', + 'type' => 'string' + )); + } + } /** From 75e1187fbf4a116901491c5d31165b8824d589eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Fri, 26 Sep 2014 20:30:10 +0200 Subject: [PATCH 5/7] stop mapping the id It can't be mapped in the subscriber, which makes the usage of the library different for the annotation driver users. --- README.md | 2 -- UPGRADE.md | 1 + src/Model/Translatable/TranslationMethods.php | 9 --------- .../Translatable/TranslationProperties.php | 6 ------ .../ORM/TranslatableEntityTranslation.php | 17 +++++++++++++++++ 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 43053de2..d509bbbb 100644 --- a/README.md +++ b/README.md @@ -227,8 +227,6 @@ class Category ``` -NB If you generate the entity with `./console doctrine:generate:entity`, you have to remove the private $id and the `setId` and `getId` functions. - After updating the database, ie. with `./console doctrine:schema:update --force`, you can now work on translations using `translate` or `getTranslations` methods. ``` php diff --git a/UPGRADE.md b/UPGRADE.md index dda1bd58..884dc82d 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -3,6 +3,7 @@ Most occurences of "listener" have been replaced with "subscriber" to honor a subtle difference between the two that is explained [in the documentation](http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#listening-and-subscribing-to-lifecycle-events). +If you use translatable, you now need to map your translation classes `id` fields. If you decided to create your own subscriber by extending a class from this library, you might have to refactor your code because of this. Likewise, DI parameters (for class names), and service ids have changed. diff --git a/src/Model/Translatable/TranslationMethods.php b/src/Model/Translatable/TranslationMethods.php index cce970d8..728e459b 100644 --- a/src/Model/Translatable/TranslationMethods.php +++ b/src/Model/Translatable/TranslationMethods.php @@ -18,15 +18,6 @@ */ trait TranslationMethods { - /** - * Returns translation ID. - * - * @return integer The ID. - */ - public function getId() - { - return $this->id; - } /** * Sets entity, that this translation should be mapped to. diff --git a/src/Model/Translatable/TranslationProperties.php b/src/Model/Translatable/TranslationProperties.php index 39094781..81e7aab1 100644 --- a/src/Model/Translatable/TranslationProperties.php +++ b/src/Model/Translatable/TranslationProperties.php @@ -18,12 +18,6 @@ */ trait TranslationProperties { - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ - protected $id; protected $locale; diff --git a/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php b/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php index 882574e1..420b64d9 100644 --- a/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php +++ b/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php @@ -12,6 +12,23 @@ class TranslatableEntityTranslation { use Model\Translatable\Translation; + /** + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") + */ + protected $id; + + /** + * Returns translation ID. + * + * @return integer The ID. + */ + public function getId() + { + return $this->id; + } + /** * @ORM\Column(type="string") */ From 7ee1e2877a039b4d080da67d723a65532c44837b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Sat, 4 Oct 2014 20:41:37 +0200 Subject: [PATCH 6/7] continue to map the id, for BC's sake. --- .../Translatable/TranslatableSubscriber.php | 123 ++++++++++++++++++ .../ORM/TranslatableEntityTranslation.php | 5 - 2 files changed, 123 insertions(+), 5 deletions(-) diff --git a/src/ORM/Translatable/TranslatableSubscriber.php b/src/ORM/Translatable/TranslatableSubscriber.php index 3f5c6212..dca10a6b 100644 --- a/src/ORM/Translatable/TranslatableSubscriber.php +++ b/src/ORM/Translatable/TranslatableSubscriber.php @@ -14,6 +14,11 @@ use Knp\DoctrineBehaviors\Reflection\ClassAnalyzer; use Knp\DoctrineBehaviors\ORM\AbstractSubscriber; +use Doctrine\ORM\ORMException; +use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\ORM\Id\BigIntegerIdentityGenerator; +use Doctrine\ORM\Id\IdentityGenerator; use Doctrine\Common\EventSubscriber, Doctrine\ORM\Mapping\ClassMetadata, @@ -66,6 +71,124 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) if ($this->isTranslation($classMetadata)) { $this->mapTranslation($classMetadata); + $this->mapId( + $classMetadata, + $eventArgs->getEntityManager() + ->getConnection() + ->getDatabasePlatform() + ); + } + } + + /** + * Kept for BC-compatibility purposes : people expect this lib to map ids for + * translations + * + * @see https://github.com/doctrine/doctrine2/blob/0bff6aadbc9f3fd8167a320d9f4f6cf269382da0/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php#L508 + */ + private function mapId(ClassMetadata $class, AbstractPlatform $platform) + { + if (!$class->hasField('id')) { + $builder = new ClassMetadataBuilder($class); + $builder->createField('id', 'integer')->isPrimaryKey()->generatedValue()->build(); + /// START DOCTRINE CODE + $idGenType = $class->generatorType; + if ($idGenType == ClassMetadata::GENERATOR_TYPE_AUTO) { + if ($platform->prefersSequences()) { + $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + } else if ($platform->prefersIdentityColumns()) { + $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); + } else { + $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_TABLE); + } + } + + // Create & assign an appropriate ID generator instance + switch ($class->generatorType) { + case ClassMetadata::GENERATOR_TYPE_IDENTITY: + // For PostgreSQL IDENTITY (SERIAL) we need a sequence name. It defaults to + // __seq in PostgreSQL for SERIAL columns. + // Not pretty but necessary and the simplest solution that currently works. + $sequenceName = null; + $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; + + if ($platform instanceof Platforms\PostgreSQLPlatform) { + $columnName = $class->getSingleIdentifierColumnName(); + $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); + $sequenceName = $class->getTableName() . '_' . $columnName . '_seq'; + $definition = array( + 'sequenceName' => $platform->fixSchemaElementName($sequenceName) + ); + + if ($quoted) { + $definition['quoted'] = true; + } + + $sequenceName = $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $platform); + } + + $generator = ($fieldName && $class->fieldMappings[$fieldName]['type'] === 'bigint') + ? new BigIntegerIdentityGenerator($sequenceName) + : new IdentityGenerator($sequenceName); + + $class->setIdGenerator($generator); + + break; + + case ClassMetadata::GENERATOR_TYPE_SEQUENCE: + // If there is no sequence definition yet, create a default definition + $definition = $class->sequenceGeneratorDefinition; + + if ( ! $definition) { + $fieldName = $class->getSingleIdentifierFieldName(); + $columnName = $class->getSingleIdentifierColumnName(); + $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); + $sequenceName = $class->getTableName() . '_' . $columnName . '_seq'; + $definition = array( + 'sequenceName' => $platform->fixSchemaElementName($sequenceName), + 'allocationSize' => 1, + 'initialValue' => 1, + ); + + if ($quoted) { + $definition['quoted'] = true; + } + + $class->setSequenceGeneratorDefinition($definition); + } + + $sequenceGenerator = new \Doctrine\ORM\Id\SequenceGenerator( + $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $platform), + $definition['allocationSize'] + ); + $class->setIdGenerator($sequenceGenerator); + break; + + case ClassMetadata::GENERATOR_TYPE_NONE: + $class->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator()); + break; + + case ClassMetadata::GENERATOR_TYPE_UUID: + $class->setIdGenerator(new \Doctrine\ORM\Id\UuidGenerator()); + break; + + case ClassMetadata::GENERATOR_TYPE_TABLE: + throw new ORMException("TableGenerator not yet implemented."); + break; + + case ClassMetadata::GENERATOR_TYPE_CUSTOM: + $definition = $class->customGeneratorDefinition; + if ( ! class_exists($definition['class'])) { + throw new ORMException("Can't instantiate custom generator : " . + $definition['class']); + } + $class->setIdGenerator(new $definition['class']); + break; + + default: + throw new ORMException("Unknown generator type: " . $class->generatorType); + } + /// END DOCTRINE COPY / PASTED code } } diff --git a/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php b/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php index 420b64d9..670051e3 100644 --- a/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php +++ b/tests/fixtures/BehaviorFixtures/ORM/TranslatableEntityTranslation.php @@ -12,11 +12,6 @@ class TranslatableEntityTranslation { use Model\Translatable\Translation; - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ protected $id; /** From d1508642f3f5acb173c3702a8d84bae703651feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Thu, 9 Oct 2014 22:38:58 +0200 Subject: [PATCH 7/7] warn about the deprecated id mapping --- UPGRADE.md | 3 ++- src/ORM/Translatable/TranslatableSubscriber.php | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 884dc82d..9cd60606 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -3,7 +3,8 @@ Most occurences of "listener" have been replaced with "subscriber" to honor a subtle difference between the two that is explained [in the documentation](http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#listening-and-subscribing-to-lifecycle-events). -If you use translatable, you now need to map your translation classes `id` fields. +If you use translatable, you should map your translation classes `id` fields, +the `id` mapping is deprecated and will be removed in version 2.0 If you decided to create your own subscriber by extending a class from this library, you might have to refactor your code because of this. Likewise, DI parameters (for class names), and service ids have changed. diff --git a/src/ORM/Translatable/TranslatableSubscriber.php b/src/ORM/Translatable/TranslatableSubscriber.php index dca10a6b..7321f015 100644 --- a/src/ORM/Translatable/TranslatableSubscriber.php +++ b/src/ORM/Translatable/TranslatableSubscriber.php @@ -82,7 +82,10 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) /** * Kept for BC-compatibility purposes : people expect this lib to map ids for - * translations + * translations. + * + * @deprecated It should be removed because it probably does not work with + * every doctrine version. * * @see https://github.com/doctrine/doctrine2/blob/0bff6aadbc9f3fd8167a320d9f4f6cf269382da0/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php#L508 */