I have 2 classes with many to many relationship: Foo (owning side) and Bar (inverse side). My form is CollectionType (of Foo) implementing EntityType (of Bar) (add Bar into Foo). This is some code for my form
FooType:
->add('Bars', CollectionType::class, array('entry_type' => BarType::class, 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false))
BarType
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('text', EntityType::class, array( 'class' => Bar::class, 'query_builder' => function (EntityRepository $er) { return $er->createQueryBuilder('bar') ->orderBy('bar.text', 'ASC'); }, 'choice_label' => 'text', 'by_reference' => false, ) ) ; }
- if i set 'multiple' => true, there is no problem
- if i set 'multiple' => false (dont ask me why, this is a requirement from work: add a plus and minus button for the form. When plus button is click, the options from Bar.text are shown, and user can select select only one from those options. When minus button is clicked, undo the plus action), relationships are established but a duplicate record of selected option is added to Bar table.
I would like to ask:
- Why does it happen? Is that the way symfony supposed to works?
- Is there any fix/workaround for it?
According to this github disccussion of Symfony, you are supposed to use 'multiple' => true to make it work
I am using Symfony 4.4, doctrine bundle 2.6.3
Edit: I would like to clarify this: my goal is to select multible options loaded from Bar->$text. But instead of selecting multiple options in one run (by setting multiple true), i would like to archieve it by adding many times (with a plus button), and each time only one option can be selected.
The reason I am doing this is that i am migrating from many to one to many to many, and I do not want to change the current UI (select one at a time) to multiple select.