我正在尝试嵌入一个表单集合,但是我在持久化新创建的对象时遇到了麻烦。
一个Customer
有许多Email
。在我的控制器中
// CustomersController.php
$customer = new Customer();
$customer->setCreatedBy(0);
$blankEmail = new Email();
$customer->addEmail($blankEmail);
$form = $this->createForm(new CustomerType(), $customer);
我记得在我的Customer
类中设置级联选项:
// Customer.php
...
/**
* @ORMOneToMany(targetEntity="Email", mappedBy="customer", cascade={"persist"})
*/
protected $emails;
我的Email
类也有所需的信息:
// Email.php
...
/**
* @ORMManyToOne(targetEntity="Customer", inversedBy="emails", cascade={"persist"})
* @ORMJoinColumn(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();
它正确地添加了客户,但是当它试图添加Email时,它说没有设置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
对象(我知道它可以)。
尝试更改客户类中默认的"addEmail"方法。
这个方法应该看起来像:
public function addEmail($email)
{
$email->setCustomer($this);
$this->emails[] = $email;
return $this;
}