symfony 양식은 Attachment
이라는 다른 엔티티와 일대일로 많은 관계가있는 엔티티 Mail
을 나타냅니다. 따라서 MailType
형태는 AttachmentType
형태를 삽입하기위한 CollectionType
필드가 포함Symfony CollectionType : 새 항목 병합
$builder
->add('attachments', CollectionType::class, [
'entry_type' => AttachmentType::class,
'allow_add' => true,
'allow_delete' => false,
'by_reference' => false,
]);
내보기는 단지 내 심포니 백엔드에 새 첨부 파일을 보낼 것입니다. 따라서 양식 데이터를 데이터베이스에 저장할 때 메일의 새로운 첨부 파일을 추가하고 기존 첨부 파일을 건드리지 않으려 고합니다.
불행하게도, 심포니/교리는 다르게 동작 :
existing attachments (in DB): [old1, old2, old3]
new attachments (contained by HTTP request): [new1, new2]
desired result in DB: [old1, old2, old3, new1, new2]
actual result in DB: [new1, new2, old3]
가 어떻게 이것을 달성 할 수 n
첨부 파일은 다음 n
먼저 기존의 첨부 파일은 그 새 첨부 파일을 덮어 씁니다 양식 데이터에 포함되는 경우? 나는 by_reference => false
이 addAttachment
메서드를 호출하게 만들 것이라고 생각했기 때문에 이것이 out-of-the-box에서도 작동 할 것으로 예상했다.
내 Mail
엔티티 코드 : 양식을 처리
class Mail {
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Attachment", mappedBy="mail", cascade={"persist", "remove"})
*/
protected $attachments;
...
public function addAttachment(\AppBundle\Entity\ttachment $attachment) {
$attachment->setMail($this);
$this->attachments[] = $attachment;
return $this;
}
}
내 컨트롤러 코드 :
당신이 원하는 것을 할 수있는 몇 가지 방법이 있습니다// $mail = find mail in database
$form = $this->createForm(MailType::class, $mail);
$form->handleRequest($request);
if ($form->isValid()) {
$mail = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($mail);
$em->flush();
}
당신이 추가하는 ArrayCollection에 방법을 시도 적이 있습니까? 좋아요 : $ this-> attachments-> add ($ attachment); – ASOlivieri
그리고 생성자에서 $ attachments를 새로운 ArrayCollection()으로 인스턴스화하고 있습니까? – ASOlivieri
symfony가'$ this-> attachments-> add ($ attachmetn)'를 호출하게하는''by_reference '=> false'가 없습니까? 네, $ attachments를 생성자의 새로운 ArrayCollection으로 인스턴스화했습니다. 죄송합니다. 위의 내용을 놓친 것 같습니다. – fishbone