php - reemplazar - campo null mysql
¿Cómo puede evitar insertar un registro nulo en la base de datos con una asociación de uno a muchos usando doctrina? (0)
Estoy trabajando con Symfony2 para crear un sistema de gestión de una escuela. Necesarios para registrar a los estudiantes registrar sus datos y sus representantes (que podrían ser los padres). En el siguiente enlace puedes ver el código que utilicé para él.
mira aquí (Ya resuelto el problema indicado en el enlace)
Pero tengo un problema que no puedo resolver. Que el segundo cargo debería ser obligatorio, porque un alumno puede tener solo un responsable. Con este código, si dejo datos en blanco del segundo responsable, se crea una nueva responsabilidad con todos los datos nulos en la base de datos y se hace referencia al nuevo alumno. Lo que necesito es que el nuevo alumno guarde la referencia del primer responsable y el segundo sea cero, y que el segundo responsable no sea creado.
Ahora, explico con un ejemplo la estructura de la base de datos que tengo y lo que obtengo:
Tabla de estudiantes en la base de datos
ID NAME SURNAMES ..... RESPONSIBLE_1 RESPONSIBLE_2
1 ....
2 ....
3 name_student surnames ... 5 6
Tabla responsable en la base de datos
ID NAME SURNAMES .....
1 ....
2 ....
3 ....
4 ....
5 name surnames date ....
6 NULL NULL NULL NULL NULL NULL ....
Como puede ver en el ejemplo, el alumno contiene la referencia de los responsables, pero la segunda carga es cero. En cambio, obtengo lo siguiente:
Tabla de estudiantes en la base de datos
ID NAME SURNAMES ..... RESPONSIBLE_1 RESPONSIBLE_2
1 ....
2 ....
3 name_student surnames ... 5 NULL
Tabla responsable en la base de datos
ID NAME SURNAMES .....
1 ....
2 ....
3 ....
4 ....
5 name surnames date ....
Intenté agregar nullable=false
en la entidad del estudiante:
/**
*
* @ORM/ManyToOne(targetEntity="Parents", inversedBy="students", cascade={"persist"})
* @ORM/JoinColumn(name="responsible2_id", referencedColumnName="id", nullable=false)
* @Assert/Valid
*/
private $responsible2;
Y obtengo este error:
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
Modifiqué la función __toString () en la entidad Padres:
public function __toString()
{
if(is_null($this->getName())) {
return ''NULL'';
}
return $this->getName();
}
Después de todo esto, aún mantiene a los segundos nulos responsables si los dejo en blanco.
El controlador utilizado en este caso está en el enlace. Muestro a continuación ya corregido:
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(),
));
}
Si bien no tengo una solución al problema, he agregado una condición de prueba. En este caso, cuando el segundo responsable es nulo, lo que hace que la condición sea asignar el identificador del primer responsable al segundo, de modo que ambos sean iguales. Al ser el Parents form
incrustado en el Students form
, no sé cómo puedo detenerlo si el segundo responsable es nulo y no se conserva para que no se guarde en la base de datos. No sé si el problema es algo así o no.
Estoy comenzando con esto, así que necesito su ayuda amablemente, gracias.