public function preSubmitData(FormEvent $event)
 {
     list($entityId, $model) = $this->prepareEvent($event);
     $saved = [];
     if ($entityId) {
         $saved = $this->relations->findByFieldId($model->getId(), $entityId);
         array_walk($saved, function (&$item) {
             $item = $item->getOption()->getId();
         });
     }
     $data = $event->getData();
     if (empty($data)) {
         $data = [];
     }
     if (!is_array($data)) {
         $data = [$data];
     }
     if ($entityId) {
         /**
          * Save selected options
          */
         $toSave = array_intersect($data, $saved);
         foreach ($data as $option) {
             if (!in_array($option, $saved)) {
                 $optionRelation = new OptionSetRelation();
                 $optionRelation->setData(null, $entityId, $model, $this->options->find($option));
                 $toSave[] = $option;
                 $this->em->persist($optionRelation);
             }
         }
         /**
          * Remove unselected
          */
         if ($entityId && $this->relations->count($model->getId(), $entityId)) {
             $toRemove = $this->relations->findByNotIn($model->getId(), $entityId, $toSave);
             foreach ($toRemove as $option) {
                 $this->em->remove($option);
             }
         }
     }
 }
 /**
  * PRE_SUBMIT event handler
  *
  * @param FormEvent $event
  */
 public function preSubmitData(FormEvent $event)
 {
     $entityId = $this->getEntityId($event);
     if ($entityId) {
         $configFieldModel = $this->configManager->getConfigFieldModel($event->getForm()->getConfig()->getOption('entityClassName'), $event->getForm()->getConfig()->getOption('entityFieldName'));
         $savedOptionIds = $this->getSavedOptionIds($configFieldModel, $entityId);
         $data = $event->getData();
         if (empty($data)) {
             $data = [];
         }
         if (!is_array($data)) {
             $data = [$data];
         }
         /**
          * Save selected options
          */
         $toSave = array_intersect($data, $savedOptionIds);
         foreach ($data as $option) {
             if (!in_array($option, $savedOptionIds)) {
                 $optionRelation = new OptionSetRelation();
                 $optionRelation->setData(null, $entityId, $configFieldModel, $this->options->find($option));
                 $toSave[] = $option;
                 $this->em->persist($optionRelation);
             }
         }
         /**
          * Remove unselected
          */
         if ($entityId && $this->relations->count($configFieldModel->getId(), $entityId)) {
             $toRemove = $this->relations->findByNotIn($configFieldModel->getId(), $entityId, $toSave);
             foreach ($toRemove as $option) {
                 $this->em->remove($option);
             }
         }
     }
 }