/** * @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); } }