フォームのコレクションを埋め込もうとしていますが、新しく作成されたオブジェクトを永続化するのに問題があります。
ACustomer
には多く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();
顧客を追加しますが、Eメールを追加しようとすると、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
ます(私が知っているように)。