Controlador:
Código:
Entity:class newOptionsController extends Controller { public function newMatriculaAction(Request $request) { $em = $this->getDoctrine()->getEntityManager(); $alumnos = $this->getDoctrine()->getRepository('AcmeDemoBundle:Alumno')->findAll(); $defecto = 0; if ($request->query->get('idcurso') == null) { $query = $em->createQuery('SELECT u FROM AcmeDemoBundle:Especialidad u '); } else { $defecto = $request->query->get('idcurso'); $sql = $this->getDoctrine()->getRepository('AcmeDemoBundle:Curso')->find($defecto); $query = $em->createQuery('SELECT u FROM AcmeDemoBundle:Especialidad u WHERE u.codCurso=' . $request->query->get('idcurso')); } $modulos = $query->getResult(); $request = $this->getRequest(); $matricula = new Matricula(); $form = $this->createFormBuilder($matricula) ->add('codAlumno', 'entity', array( 'class' => 'AcmeDemoBundle:Alumno', 'empty_value' => '-', 'expanded' => false, 'multiple' => false, 'property' => 'nombre' )) ->add('codCurso', 'entity', array( 'class' => 'AcmeDemoBundle:Curso', 'expanded' => false, 'multiple' => false, 'property' => 'titulo' )) ->add('codModulo', 'entity', array( 'class' => 'AcmeDemoBundle:Modulo', 'empty_value' => '-', 'required' => true, 'expanded' => true, 'multiple' => true, 'property' => 'nombre' )) ->getForm(); if ($request->getMethod() == 'POST') { $form->bind($request); if ($form->isValid()) { try { $data = $form->getData(); $sql = $this->getDoctrine()->getRepository('AcmeDemoBundle:Matricula')->findByCodAlumno($data->getCodAlumno()); // $sql="select c from AcmeDemoBundle:Matricula c where c.codAlumno =". $data->getCodAlumno()." and c.codCurso =".$data->getCodCurso().""; if ($sql != NULL && count($sql) > 0) { $this->get('session')->getFlashBag()->add('notice', 'Este alumno ya está matriculado!'); return $this->redirect('newMatricula'); } if ($data->getCodAlumno() == NULL || $data->getCodCurso() == NULL) { $this->get('session')->getFlashBag()->add('notice', 'Debe rellenar TODOS los campos!'); return $this->redirect('newMatricula'); } $em = $this->getDoctrine()->getManager(); $em->persist($data); $em->flush(); return $this->redirect('newMatricula'); } catch (Exception $ex) { $response = new Response('error'); return $response; } } } return $this->render('AcmeDemoBundle:NewOptions:newMatricula.html.twig', array('form' => $form->createView(), 'alumnos' => $alumnos, 'modulos' => $modulos)); } }
Código:
<?php namespace Acme\DemoBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Matricula */ class Matricula { /** * @var integer */ private $codCurso; /** * @var integer */ private $codModulo; /** * @var integer */ private $codAlumno; /** * Constructor */ public function __construct() { $this->codModulo = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Set codCurso * * @param integer $codCurso * @return Matricula */ public function setCodCurso($codCurso) { $this->codCurso = $codCurso; return $this; } /** * Get codCurso * * @return integer */ public function getCodCurso() { return $this->codCurso; } /** * Set codModulo * * @param integer $codModulo * @return Matricula */ public function setCodModulo($codModulo) { $this->codModulo = $codModulo; return $this; } /** * Get codModulo * * @return integer */ public function getCodModulo() { return $this->codModulo; } /** * Set codAlumno * * @param integer $codAlumno * @return Matricula */ public function setCodAlumno($codAlumno) { $this->codAlumno = $codAlumno; return $this; } /** * Get codAlumno * * @return integer */ public function getCodAlumno() { return $this->codAlumno; } }
ORM Maricula:
Código:
Acme\DemoBundle\Entity\Matricula: type: entity table: matricula id: codCurso: associationKey: true codAlumno: associationKey: true codModulo: associationKey: true oneToOne: codCurso: targetEntity: Curso cascade: {} mappedBy: null inversedBy: null joinColumns: cod_curso: referencedColumnName: id_curso orphanRemoval: false codAlumno: targetEntity: Alumno cascade: {} mappedBy: null inversedBy: null joinColumns: cod_alumno: referencedColumnName: id_alumno orphanRemoval: false oneToMany: codModulo: targetEntity: Modulo cascade: ["persist"] mappedBy: matricula lifecycleCallbacks: { }
a ver si me podeis dar una solución, o explicarme como usar el ArrayCollection en este caso, porque llevo 2 semanas con ello y por mas que intento, no doy con nada.
Muchas gracias!!!