Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/01/2013, 19:41
crash2512
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Obtener registros con Doctrine

Hola

Estoy probando Doctrine con Symfony 2.1 ya que soy muy nuevo en estos temas de los ORM y los frameworks para php, y tengo una inquietud que no he podido resolver

tengo la siguiente relación: Un curso tiene varios estudiantes, por tanto es una relación uno a muchos y he planteado las entidades curso y estudiante de la siguiente manera:

Código PHP:
namespace tablacursosBundleEntity;

use 
DoctrineORMMapping as ORM;
use 
DoctrineCommonCollectionsArrayCollection;
/**
 * tabla\cursosBundle\Entity\Curso
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="tabla\cursosBundle\Entity\CursoRepository")
 */
class Curso
{
    
/**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;

    
/**
     * @var string $nombre
     *
     * @ORM\Column(name="nombre", type="string", length=255)
     */
    
private $nombre;

    
/**
     * @ORM\OneToMany(targetEntity="estudiante", mappedBy="Curso")
     */
    
private $estudiantes;
    
    
    public function 
__construct() {
        
$this->estudiantes = new ArrayCollection();
    }
    
    
/**
     * Get id
     *
     * @return integer 
     */
    
public function getId()
    {
        return 
$this->id;
    }

    
/**
     * Set nombre
     *
     * @param string $nombre
     * @return Curso
     */
    
public function setNombre($nombre)
    {
        
$this->nombre $nombre;
    }

    
/**
     * Get nombre
     *
     * @return string 
     */
    
public function getNombre()
    {
        return 
$this->nombre;
    }
    
    public function 
addEstudiantes(tablacursosBundleEntityestudiante $estudiante)
    { 
        
$this->estudiantes[] = $estudiante;
    }
    
    public function 
getEstudiantes()
    { 
        return 
$this->estudiantes;
    }

Ahora, la entidad estudiante:
Código PHP:
namespace tablacursosBundleEntity;

use 
DoctrineORMMapping as ORM;

/**
 * tabla\cursosBundle\Entity\estudiante
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="tabla\cursosBundle\Entity\estudianteRepository")
 */
class estudiante
{
    
/**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;

    
/**
     * @var string $nombre
     *
     * @ORM\Column(name="nombre", type="string", length=255)
     */
    
private $nombre;

    
/**
     * @var string $apellido
     *
     * @ORM\Column(name="apellido", type="string", length=255)
     */
    
private $apellido;

    
/**
     * @ORM\ManyToOne(targetEntity="Curso", inversedBy="estudiante")
     * @ORM\JoinColumn(name="curso_id", referencedColumnName="id")
     * @return integer 
     */
    
private $curso;

    
/**
     * Get id
     *
     * @return integer 
     */
    
public function getId()
    {
        return 
$this->id;
    }

    
/**
     * Set nombre
     *
     * @param string $nombre
     * @return estudiante
     */
    
public function setNombre($nombre)
    {
        
$this->nombre $nombre;
    
        return 
$this;
    }

    
/**
     * Get nombre
     *
     * @return string 
     */
    
public function getNombre()
    {
        return 
$this->nombre;
    }

    
/**
     * Set apellido
     *
     * @param string $apellido
     * @return estudiante
     */
    
public function setApellido($apellido)
    {
        
$this->apellido $apellido;
    
        return 
$this;
    }

    
/**
     * Get apellido
     *
     * @return string 
     */
    
public function getApellido()
    {
        return 
$this->apellido;
    }
    
    public function 
setCurso(tablacursosBundleEntityCurso $curso)
    {
        
$this->curso $curso;
    }
    
    public function 
getCurso()
    {
        return 
$this->curso;
    }

Ahora dentro del controlador de symfony tengo esta función:

Código PHP:
public function getEstudiantesAction(Request $request$id)
    {
        
$em $this->getDoctrine()->getManager();
        
        
$entity $em->getRepository('tablacursosBundle:Curso')->find($id);

        if (!
$entity) {
            throw 
$this->createNotFoundException('Unable to find Curso entity.');
        }
        
$estudiantes $entity->getEstudiantes();
        foreach (
$entity->getEstudiantes() as $estudiante)
        {
            echo 
"est: ".$estudiante->getNombre()."<br />";
        }
        if(
$estudiantes instanceof tablacursosBundleEntityestudiante)
        {
            echo 
"es un array de Estudiantes";
        } else {
            echo 
"no es un array de Estudiantes";
            
        }
        return new 
Response();

Hasta aqui todo de maravilla, es un ejemplo muy similar al que está en la documentación de Doctrine, pero cuando ejecuto esta funcion, me trae el curso pero no me trae los estudiantes que pertenecen a este curso...

La verdad he leido la documentacion de Doctrine pero no encuentro nada parecido al problema que planteo y agradecería enormemente a quienes me puedan dar una ayudita con este inconveniente, tal vez lo unico que he podido notar es que al momento de hacer el find no entra al constructor de la entidad curso pero no se si esto es normal al ejecutar el find del entitymanager.

Gracias de antemano por sus comentarios