/**
  * @param FormBuilder $form
  * @param ClassMetadata $metaData
  * @param string $fieldName
  */
 public function createAssociationField($form, $metaData, $fieldName)
 {
     $formField = new SelectField(array());
     $formField->setLabel($this->translateName($fieldName));
     $formField->setName($fieldName);
     $mapping = $metaData->getAssociationMapping($fieldName);
     $required = false;
     $targetEntityName = $metaData->getAssociationTargetClass($fieldName);
     $targetEntity = $this->doctrineService->getRepository($targetEntityName);
     if ($metaData->isCollectionValuedAssociation($fieldName)) {
         $formField->setMultiple(true);
         $formField->setRequired(false);
     } else {
         foreach ($mapping['joinColumns'] as $joinColumn) {
             if (!$joinColumn['nullable']) {
                 $required = true;
                 break;
             }
         }
         $formField->setRequired($required);
     }
     $collection = static::entityToCollection($targetEntity->findAll(), !$formField->isMultiple());
     $formField->setCollection($collection);
     $form->addField($formField);
 }
 /**
  * @param ClassMetadata$metaData
  * @param object $entity
  * @param string $key
  * @param mixed $value
  */
 private function decodeAssociationMulti($metaData, $entity, $key, $value)
 {
     $methodName = 'get' . $key;
     /**
      * @var ArrayCollection $collection
      */
     $collection = $entity->{$methodName}();
     $collection->clear();
     if (!$value) {
         return;
     }
     $targetEntityName = $metaData->getAssociationTargetClass($key);
     foreach ($value as $record) {
         $value = $this->doctrineService->getRepository($targetEntityName)->findOneBy(['id' => $record]);
         $collection->add($value);
     }
 }