Я пытаюсь установить 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();
Он добавляет клиента в порядок, но когда он пытается добавить электронную почту, он говорит, что не было установлено clientId. Итак, я попробовал это, и это работает:
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
объект (как я знаю, что это возможно).
Какие 'strategy' вы установите в' @ GeneratedValue' аннотацию? –
Как «Клиент», так и «Электронная почта» используют «АВТО» для своего идентификатора. Это то, что вы имели ввиду? –