У меня есть отношение «многие ко многим» между двумя объектами A и B.
Поэтому, добавляя форму, чтобы добавить entityA
в entityB
, я делаю следующее:
$builder ->add('entityAs', 'entity', array( 'class' => 'xxxBundle:EntityA', 'property' => 'name', 'multiple' => true, ));}
И все в порядке.
Но в зависимости от типа поля entityA, я хочу иногда устанавливать «multiple» в false, поэтому я делаю следующее:
if($type=='a'){ $builder ->add('entityAs', 'entity', array( 'class' => 'xxxBundle:entityA', 'property' => 'name', 'multiple' => true, ));} else { $builder ->add('entityAs', 'entity', array( 'class' => 'xxxBundle:entityA', 'property' => 'name', 'multiple' => false, )); }
Это дает мне следующую ошибку:
Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be an array, object given, called in C:\wamp\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 519 and defined in C:\wamp\www\Symfony\vendor\doctrine\common\lib\Doctrine\Common\Collections\ArrayCollection.php line 48
Кто-нибудь может мне помочь?
В EntityA у вас есть что-то вроде этого, не так ли?
public function setEntitiesB($data) { $this->entitiesB = $data ; }
Теперь, поскольку вы также можете получать одно значение вместо массива значений, вам нужно что-то вроде этого:
public function setEntitiesB($data) { if ( is_array($data) ) { $this->entitiesB = $data ; } else { $this->entitiesB->clear() ; $this->entitiesB->add($data) ; } }
я бы проверил значение entityA в контроллере и в зависимости от него создавал разные формы.
в контроллере:
if ($entityA->getType() == 'a') { $form = new FormB(); // form with multiple true } else { $form = new FormA(); // form with multiple false }