2013-03-19 37 views
0

我想embed a collection of forms,但我遇到了麻煩持久新創建的對象。級聯一個協會

A Customer有許多Email s。在我的控制器,

// CustomersController.php 
$customer = new Customer(); 
$customer->setCreatedBy(0); 

$blankEmail = new Email(); 
$customer->addEmail($blankEmail); 

$form = $this->createForm(new CustomerType(), $customer); 

我記得級聯選項在我Customer類設置:

// Customer.php 
... 
/** 
* @ORM\OneToMany(targetEntity="Email", mappedBy="customer", cascade={"persist"}) 
*/ 
protected $emails; 

Email類也有所需的信息:

// Email.php 
... 
/** 
* @ORM\ManyToOne(targetEntity="Customer", inversedBy="emails", cascade={"persist"}) 
* @ORM\JoinColumn(name="customers_id", referencedColumnName="id") 
*/ 
protected $customer; 

出於某種原因,這是行不通的:

if ($request->isMethod('POST')) { 
    $form->bind($request); 
    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($customer); 
     $em->flush(); 

它增加了客戶的權利,但是當它試圖添加電子郵件時,它表示沒有設置customerId。所以,我想這一點,和它的作品:

if ($request->isMethod('POST')) { 
    $form->bind($request); 
    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     foreach ($customer->getEmails() as $email) 
      $email->setCustomer($customer); 
      $em->persist($email); 
     } 
     $em->persist($customer); 
     $em->flush(); 

但是我真的希望能夠得到它一舉,只是堅持的$customer對象(因爲我知道它可以)。

+0

哪'strategy'你在'@ GeneratedValue'註解集? – 2013-03-19 12:07:03

+0

「客戶」和「電子郵件」都使用「自動」作爲其ID。你是這個意思嗎? – 2013-03-19 13:02:49

回答

1

嘗試更改Customer類中的默認「addEmail」方法。

這個方法應該是這樣的:

public function addEmail($email) 
{ 
    $email->setCustomer($this); 
    $this->emails[] = $email; 
    return $this; 
} 
+0

太棒了!謝謝 – 2013-03-20 02:24:18