Как можно избежать вставки нулевой записи в базу данных с помощью связи «один ко многим» с использованием доктрины?

Я работаю с 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Я не знаю, как я могу остановиться, если второй ответственный является нулевым, не будет сохранен, чтобы затем не сохранен в базе данных. Я не знаю, является ли проблема в этом или нет.

Я начинаю с этого, поэтому мне нужна ваша помощь, спасибо.

Ответы на вопрос(0)

Ваш ответ на вопрос