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]);
}
}