/** * Add mapping data to a translation entity. * * @param ClassMetadata $metadata */ private function mapTranslation(ClassMetadata $metadata) { $className = $metadata->name; try { $resourceMetadata = $this->resourceMetadataRegistry->getByClass($className); } catch (\InvalidArgumentException $exception) { return; } /** @var MetadataInterface $translatableResourceMetadata */ $translatableResourceMetadata = $this->resourceMetadataRegistry->get(str_replace('_translation', '', $resourceMetadata->getAlias())); $metadata->mapManyToOne(['fieldName' => 'translatable', 'targetEntity' => $translatableResourceMetadata->getClass('model'), 'inversedBy' => 'translations', 'joinColumns' => [['name' => 'translatable_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE', 'nullable' => false]]]); if (!$metadata->hasField('locale')) { $metadata->mapField(['fieldName' => 'locale', 'type' => 'string', 'nullable' => false]); } // Map unique index. $columns = [$metadata->getSingleAssociationJoinColumnName('translatable'), 'locale']; if (!$this->hasUniqueConstraint($metadata, $columns)) { $constraints = isset($metadata->table['uniqueConstraints']) ? $metadata->table['uniqueConstraints'] : []; $constraints[$metadata->getTableName() . '_uniq_trans'] = ['columns' => $columns]; $metadata->setPrimaryTable(['uniqueConstraints' => $constraints]); } }
function it_does_not_set_custom_repository_class_if_registry_does_not_have_class(LoadClassMetadataEventArgs $event, RegistryInterface $registry, ClassMetadata $classMetadata) { $registry->getByClass('Foo')->willThrow(\InvalidArgumentException::class); $classMetadata->setCustomRepositoryClass(Argument::any())->shouldNotBeCalled(); $this->loadClassMetadata($event); }