わかった!
「フォームコレクション」は不要です。考慮しなければならないことが 2 つあります。
- 教師のユーザー名は一意であるため、最初に確認する必要があります。教師のユーザー名が既に存在する場合は、「addTeacher($teacherOld)」との関係を追加するだけです。存在しない場合は、「addTeacher($teacher)」を使用して追加します。
- $student->addTeacher($teacher); で教師と生徒の関係を保存します。
public function addAction(Request $request) {
$student = $this->container->get('security.context')->getToken()->getstudent();
$teacher = new teacher();
$form = $this->createFormBuilder($teacher)
->add('teacherUsername', 'text')
->getForm();
if($request->getMethod() == 'POST') {
$form->bindRequest($request);
if($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$teacherUsername = $form->get('teacherUsername')->getData();
// check teacherUsername exist?
$teacherOld = $this->getDoctrine()->getRepository('PSEMainBundle:teacher')->findOneByTeacherUsername($teacherUsername);
if ($teacherOld) {
$student->addTeacher($teacherOld);
} else {
$teacher->setTeacherUsername($teacherUsername);
$student->addTeacher($teacher);
}
// add relations
$em->persist($student);
$em->flush();
return $this->redirect($this->generateUrl('_teacher'));
}
}
return $this->render('PSEMainBundle:teacher:add.html.twig', array('form' => $form->createView()));}