2013-03-19 57 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