Я использую два объекта, имеющих отношение ManyToMany, Jobsite, имеющий свойство worker, и наоборот. У меня есть форма JobsiteType, которая предлагает список рабочих для выбора или нет, он хорошо работает с множественным выбором: выбор или отмена выбора хорошо распространяются в БД, но он не работает при использовании флажков: элемент отмены выбора не удаляет его из таблица отношений. Я использую Symfony v 2.8, вот несколько деталей:
// Сущность
class Jobsite {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="UserWorker", inversedBy="jobsites", cascade={"all"})
* @ORM\JoinTable(name="jobsite_worker")
*/
protected $workers;
...
// Рабочий объект
class UserWorker {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Jobsite", mappedBy="workers", cascade={"all"})
*/
protected $jobsites;
...
// Тип сайта
public function buildForm(FormBuilderInterface $builder, array $options) {
...
$builder
->add('workers', EntityType::class, array(
'class' => 'MyBundle:UserWorker',
'choice_label' => 'name',
'choices_as_values' => true,
'by_reference' => false,
'multiple' => true,
'expanded' => true,// if false, multiple select is working almost well !
'label' => 'label.workers',
'required' => false,
'choices' => $workers,// list of possible workers
))
...
Так кто-нибудь знает, что не так со стилем флажков (несколько + расширенный)? Я знаю, что непроверенные входы ничего не отправляют, значит ли это, что мне нужно вручную перебирать рабочих в событии формы, чтобы применить правильные изменения? Ну, я также заметил, что он не работает с полем множественного выбора, когда ни один элемент не выбран, это, вероятно, связано с тем же эффектом «ничего не отправлено, если пусто».