/**
  * {@inheritdoc}
  *
  * @param array $mapping  The mapping to validate & complete.
  * @return array  The validated & completed mapping.
  * @override
  */
 protected function _validateAndCompleteMapping(array $mapping)
 {
     parent::_validateAndCompleteMapping($mapping);
     if ($this->isOwningSide()) {
         if (!isset($mapping['joinColumns'])) {
             throw MappingException::invalidMapping($this->_sourceFieldName);
         }
         $this->joinColumns = $mapping['joinColumns'];
         foreach ($mapping['joinColumns'] as $joinColumn) {
             $this->sourceToTargetKeyColumns[$joinColumn['name']] = $joinColumn['referencedColumnName'];
         }
         $this->targetToSourceKeyColumns = array_flip($this->sourceToTargetKeyColumns);
     }
     $this->deleteOrphans = isset($mapping['deleteOrphans']) ? (bool) $mapping['deleteOrphans'] : false;
     return $mapping;
 }
 /**
  * Validates and completes the mapping.
  *
  * @param array $mapping
  * @override
  */
 protected function _validateAndCompleteMapping(array $mapping)
 {
     parent::_validateAndCompleteMapping($mapping);
     if ($this->isOwningSide()) {
         // owning side MUST have a join table
         if (!isset($mapping['joinTable'])) {
             throw MappingException::joinTableRequired($mapping['fieldName']);
         }
         // owning side MUST specify joinColumns
         if (!isset($mapping['joinTable']['joinColumns'])) {
             throw MappingException::invalidMapping($this->_sourceFieldName);
         }
         foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) {
             $this->sourceToRelationKeyColumns[$joinColumn['referencedColumnName']] = $joinColumn['name'];
             $this->joinTableColumns[] = $joinColumn['name'];
         }
         $this->sourceKeyColumns = array_keys($this->sourceToRelationKeyColumns);
         // owning side MUST specify inverseJoinColumns
         if (!isset($mapping['joinTable']['inverseJoinColumns'])) {
             throw MappingException::invalidMapping($this->_sourceFieldName);
         }
         foreach ($mapping['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) {
             $this->targetToRelationKeyColumns[$inverseJoinColumn['referencedColumnName']] = $inverseJoinColumn['name'];
             $this->joinTableColumns[] = $inverseJoinColumn['name'];
         }
         $this->targetKeyColumns = array_keys($this->targetToRelationKeyColumns);
     }
 }