/** * Add mapping data to a translation entity. * * @param ClassMetadata $metadata */ private function mapTranslation(ClassMetadata $metadata) { // In the case A -> B -> TranslationInterface, B might not have mapping defined as it // is probably defined in A, so in that case, we just return. if (!isset($this->configs[$metadata->name])) { return; } $metadata->mapManyToOne(array('fieldName' => 'translatable', 'targetEntity' => $this->configs[$metadata->name]['model'], 'inversedBy' => 'translations', 'joinColumns' => array(array('name' => 'translatable_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE', 'nullable' => false)))); if (!$metadata->hasField('locale')) { $metadata->mapField(array('fieldName' => 'locale', 'type' => 'string', 'nullable' => false)); } // Map unique index. $columns = array($metadata->getSingleAssociationJoinColumnName('translatable'), 'locale'); if (!$this->hasUniqueConstraint($metadata, $columns)) { $constraints = isset($metadata->table['uniqueConstraints']) ? $metadata->table['uniqueConstraints'] : array(); $constraints[$metadata->getTableName() . '_uniq_trans'] = array('columns' => $columns); $metadata->setPrimaryTable(array('uniqueConstraints' => $constraints)); } }