2013-05-14 93 views
2

形式「假」我有兩個實體A和B.設置多個=在多對多的關係Symfony2的

所以加入表單時之間的許多一對多的關係,爲了增加entityAentityB,我做了以下內容:

$builder   
    ->add('entityAs', 'entity', array(
     'class' => 'xxxBundle:EntityA', 
     'property' => 'name', 
     'multiple' => true, 
    ));} 

而且一切正常。

但根據字段類型entityA的,我想有時設置「多」爲假,所以我做了以下內容:

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 

任何人都可以幫助我嗎?

+0

你確定錯誤是在這裏提出? – DonCallisto 2013-05-14 09:19:33

+0

其實是@DonCallisto – user2269869 2013-05-14 09:21:07

+0

我敢打賭不。我敢打賭,錯誤是進入你的實體:你期望有一個ArrayCollection,但你有一個單一的實體(對象),這會導致你的問題。 – DonCallisto 2013-05-14 09:36:17

回答

6

在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) ; 
    } 
} 
+0

非常感謝你。你救了我。你是天才@Zeljko – user2269869 2013-05-15 12:38:56

0

我會檢查控制器中的entityA值,並根據它創建不同的表單。

在控制器:

if ($entityA->getType() == 'a') { 
    $form = new FormB(); // form with multiple true 
} else { 
    $form = new FormA(); // form with multiple false 
} 
+0

嘗試此操作時,我仍然有相同的錯誤消息。 @Laurynas – user2269869 2013-05-14 16:29:35

+0

這不可能是真的。 FormA和FormB是兩個不同的處理方式,因此不會出現任何錯誤。 – 2013-05-18 18:41:34