Как можно избежать вставки нулевой записи в базу данных с помощью связи «один ко многим» с использованием доктрины?
Я работаю с Symfony2, чтобы создать систему управления школой. Необходимо зарегистрировать учащегося, записать свои данные и своих представителей (которые могут быть родителями). В следующей ссылке вы можете увидеть код, который я использовал для этого.
Смотри сюда (Уже решена проблема указанная в ссылке)
Но у меня есть проблема, которую я не могу решить. Это второе обвинение должно быть обязательным, потому что ученик может иметь только одного ответственного. С помощью этого кода, если я оставляю пустые данные от второго ответственного, создается новая ответственность со всеми нулевыми данными в базе данных, и новый студент направляется к нему. Мне нужно, чтобы новый студент сохранил ссылку на первого ответственного, а второй - на ноль, а второй ответственный не был создан.
Теперь я объясню на примере структуру базы данных, которую я имею, и что я получаю:
Студенческий стол в базе данных
ID NAME SURNAMES ..... RESPONSIBLE_1 RESPONSIBLE_2
1 ....
2 ....
3 name_student surnames ... 5 6
Ответственная таблица в базе данных
ID NAME SURNAMES .....
1 ....
2 ....
3 ....
4 ....
5 name surnames date ....
6 NULL NULL NULL NULL NULL NULL ....
Как вы можете видеть на примере, ученик содержит ссылку ответственных, но второй заряд равен нулю. Вместо этого я получаю следующее:
Студенческий стол в базе данных
ID NAME SURNAMES ..... RESPONSIBLE_1 RESPONSIBLE_2
1 ....
2 ....
3 name_student surnames ... 5 NULL
Ответственная таблица в базе данных
ID NAME SURNAMES .....
1 ....
2 ....
3 ....
4 ....
5 name surnames date ....
Я пытался добавитьnullable=false
в студенческом объединении:
/**
*
* @ORM\ManyToOne(targetEntity="Parents", inversedBy="students", cascade={"persist"})
* @ORM\JoinColumn(name="responsible2_id", referencedColumnName="id", nullable=false)
* @Assert\Valid
*/
private $responsible2;
И я получаю эту ошибку:
Catchable Fatal Error: Method School\BackendBundle\Entity\Parents::__toString() must return a string value in /opt/lampp/htdocs/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php line 199
Я изменил функцию __toString () в объекте Parents:
public function __toString()
{
if(is_null($this->getName())) {
return 'NULL';
}
return $this->getName();
}
После всего этого, он все еще сохраняет ответственность за вторые нули, если я оставлю это поле пустым
Контроллер, используемый в этом случае, находится по ссылке. Я показываю ниже уже исправлено:
StudentController.php
/**
* Creates a new Student entity.
*
*/
public function createAction(Request $request)
{
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$responsible1 = $em->getRepository('BackendBundle:Parents')->findResponsible($entity->getResponsible1()->getNid());
$responsible2 = $em->getRepository('BackendBundle:Parents')->findResponsible($entity->getResponsible2()->getNid());
if($responsible1){
$entity->setResponsible1($responsible1);
}
if($responsible2){
$entity->setResponsible2($responsible2);
}
//This test conditions
if($entity->getResponsible2()->getNid() == "" )
{
$entity->setResponsible2($entity->getResponsible1());
}
//Select values for other fields.
$entity->getResponsible1()->setUsername($entity->getResponsible1()->getNid());
$entity->getResponsible2()->setUsername($entity->getResponsible2()->getNid());
$entity->getResponsible1()->setPassword($entity->getResponsible1()->getNid());
$entity->getResponsible2()->setPassword($entity->getResponsible2()->getNid());
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
}
return $this->render('BackendBundle:Student:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Хотя у меня нет решения проблемы, я добавил условие проверки. В этом случае, когда второй ответственный является нулевым, что делает условие назначением идентификатора первого ответственного второму так, чтобы оба были одинаковыми. БытьParents form
встроен вStudents form
Я не знаю, как я могу остановиться, если второй ответственный является нулевым, не будет сохранен, чтобы затем не сохранен в базе данных. Я не знаю, является ли проблема в этом или нет.
Я начинаю с этого, поэтому мне нужна ваша помощь, спасибо.