Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/01/2013, 20:23
crash2512
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 3 meses
Puntos: 0
Relacion 1:N en tabla padre

Hola,

como ya dije en una discusión anterior soy nuevo con symfony y los ORM como doctrine; actualmente estoy desarrollando una aplicación muy sencilla, pero tengo algunas inquietudes que me gustaría comentar con ustedes:

Quiero saber si en una tabla padre puedo tener una relacion N:N con otra tabla.

la idea basica en mi aplicación es tener una clase padre llamada User, de ella heredan las clases Administrador y Acudiente, ahora, quiero hacer un login a mi gusto para que me muestre ciertos datos dependiendo del tipo de usuario, por tanto le he puesto una relación N:N con una entidad Roles, pero cuando intento traer los roles de mi usuario me muestra un error y no se que pueda estar pasando.

Tengo en mi aplicación la siguiente estructura:

Una clase usuario como la que se muestra a continuación:

Código PHP:
Ver original
  1. namespace User\userBundle\Entity;
  2.  
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Doctrine\ORM\Mapping\InheritanceType;
  5. use Doctrine\ORM\Mapping\DiscriminatorColumn;
  6. use Doctrine\ORM\Mapping\DiscriminatorMap;
  7. use \Symfony\Component\Security\Core\User\UserInterface;
  8.  
  9. /**
  10.  * User\userBundle\Entity\User
  11.  *
  12.  * @ORM\Table(name = "tbl_user")
  13.  * @ORM\Entity(repositoryClass="User\userBundle\Entity\UserRepository")
  14.  *
  15.  * @InheritanceType("JOINED")
  16.  * @DiscriminatorColumn(name="discr", type="string")
  17.  * @DiscriminatorMap({"user" = "User", "administrator" = "Admin\adminBundle\Entity\Administrator", "acudiente" = "Acudiente\acudienteBundle\Entity\Acudiente"})
  18.  */
  19. class User implements UserInterface
  20. {
  21.     /**
  22.      * @var integer $id
  23.      *
  24.      * @ORM\Column(name="id", type="integer")
  25.      * @ORM\Id
  26.      * @ORM\GeneratedValue(strategy="AUTO")
  27.      */
  28.     private $id;
  29.  
  30.     /**
  31.      * @var string $primerNombre
  32.      *
  33.      * @ORM\Column(name="primerNombre", type="string", length=255)
  34.      */
  35.     private $primerNombre;
  36.  
  37.    
  38.     /**
  39.      * @var string $primerApellido
  40.      *
  41.      * @ORM\Column(name="primerApellido", type="string", length=255)
  42.      */
  43.     private $primerApellido;
  44.  
  45.  
  46.     /**
  47.      * @ORM\ManyToMany(targetEntity="User\userBundle\Entity\role")
  48.      * @ORM\JoinTable(name="rel_user_role", joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
  49.      * inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")})
  50.      */
  51.     protected $user_roles;
  52.    
  53.    
  54.     public function __construct() {
  55.         $this->user_roles = new \Doctrine\Common\Collections\ArrayCollection();
  56.     }
  57.    
  58.     /**
  59.      * Get id
  60.      *
  61.      * @return integer
  62.      */
  63.     public function getId()
  64.     {
  65.         return $this->id;
  66.     }
  67.  
  68.     /**
  69.      * Set primerNombre
  70.      *
  71.      * @param string $primerNombre
  72.      * @return User
  73.      */
  74.     public function setPrimerNombre($primerNombre)
  75.     {
  76.         $this->primerNombre = $primerNombre;
  77.    
  78.         return $this;
  79.     }
  80.  
  81.     /**
  82.      * Get primerNombre
  83.      *
  84.      * @return string
  85.      */
  86.     public function getPrimerNombre()
  87.     {
  88.         return $this->primerNombre;
  89.     }
  90.  
  91.     public function getRoles() {
  92.         return $this->user_roles->toArray();
  93.     }



ahora tengo la clase administrador:

Código PHP:
Ver original
  1. namespace Admin\adminBundle\Entity;
  2.  
  3. use Doctrine\ORM\Mapping as ORM;
  4. use backEnd\backEndBundle\Entity\User;
  5. use \Symfony\Component\Security\Core\User\UserInterface;
  6.  
  7. /**
  8.  * Admin\adminBundle\Entity\Administrator
  9.  *
  10.  * @ORM\Table(name= "tbl_administrador")
  11.  * @ORM\Entity(repositoryClass="Admin\adminBundle\Entity\AdministratorRepository")
  12.  */
  13. class Administrator extends User
  14. {
  15.     /**
  16.      * @var integer $id
  17.      *
  18.      * @ORM\Column(name="id", type="integer")
  19.      * @ORM\Id
  20.      * @ORM\GeneratedValue(strategy="AUTO")
  21.      */
  22.     private $id;
  23.  
  24.     /**
  25.      * @var integer $cedula
  26.      *
  27.      * @ORM\Column(name="cedula", type="integer")
  28.      */
  29.     private $cedula;
  30.  
  31.     /**
  32.      * @var \DateTime $fechaIngreso
  33.      *
  34.      * @ORM\Column(name="fechaIngreso", type="date")
  35.      */
  36.     private $fechaIngreso;
  37.  
  38.     /**
  39.      * @var string $username
  40.      *
  41.      * @ORM\Column(name="username", type="string", length=255)
  42.      */
  43.     private $username;
  44.  
  45.     /**
  46.      * @var string $password
  47.      *
  48.      * @ORM\Column(name="password", type="string", length=255)
  49.      */
  50.     private $password;
  51.  
  52.     /**
  53.      * @var string $email
  54.      *
  55.      * @ORM\Column(name="email", type="string", length=255)
  56.      */
  57.     private $email;
  58.  
  59.     /**
  60.      * @ORM\Column(name="salt", type="string", length=255)
  61.      */
  62.     protected $salt;
  63.  
  64.  
  65.     /**
  66.      * Get id
  67.      *
  68.      * @return integer
  69.      */
  70.     public function getId()
  71.     {
  72.         return $this->id;
  73.     }
  74.  
  75.     /**
  76.      * Set cedula
  77.      *
  78.      * @param integer $cedula
  79.      * @return Administrator
  80.      */
  81.     public function setCedula($cedula)
  82.     {
  83.         $this->cedula = $cedula;
  84.    
  85.         return $this;
  86.     }
  87.  
  88.     /**
  89.      * Get cedula
  90.      *
  91.      * @return integer
  92.      */
  93.     public function getCedula()
  94.     {
  95.         return $this->cedula;
  96.     }
  97.  
  98.     /**
  99.      * Set fechaIngreso
  100.      *
  101.      * @param \DateTime $fechaIngreso
  102.      * @return Administrator
  103.      */
  104.     public function setFechaIngreso($fechaIngreso)
  105.     {
  106.         $this->fechaIngreso = $fechaIngreso;
  107.    
  108.         return $this;
  109.     }
  110.  
  111.     /**
  112.      * Get fechaIngreso
  113.      *
  114.      * @return \DateTime
  115.      */
  116.     public function getFechaIngreso()
  117.     {
  118.         return $this->fechaIngreso;
  119.     }
  120.  
  121.     /**
  122.      * Set email
  123.      *
  124.      * @param string $email
  125.      * @return Administrator
  126.      */
  127.     public function setEmail($email)
  128.     {
  129.         $this->email = $email;
  130.    
  131.         return $this;
  132.     }
  133.  
  134.     /**
  135.      * Get email
  136.      *
  137.      * @return string
  138.      */
  139.     public function getEmail()
  140.     {
  141.         return $this->email;
  142.     }
  143.    
  144.     public function eraseCredentials() {
  145.        
  146.     }
  147.  
  148.     public function getPassword() {
  149.         return $this->password;
  150.     }
  151.  
  152.     public function getRoles() {
  153.         return $this->user_roles->toArray();
  154.     }
  155.  
  156.     public function getSalt() {
  157.         return $this->salt;
  158.     }
  159.  
  160.     public function getUsername() {
  161.         return $this->username;
  162.     }
  163. }


y por ultimo mi clase Acudiente:
Código PHP:
Ver original
  1. namespace Acudiente\acudienteBundle\Entity;
  2.  
  3. use Doctrine\ORM\Mapping as ORM;
  4. use User\userBundle\Entity\User;
  5.  
  6. /**
  7.  * Acudiente\acudienteBundle\Entity\Acudiente
  8.  *
  9.  * @ORM\Table(name= "tbl_acudiente")
  10.  * @ORM\Entity(repositoryClass="Acudiente\acudienteBundle\Entity\AcudienteRepository")
  11.  */
  12. class Acudiente extends User
  13. {
  14.     /**
  15.      * @var integer $id
  16.      *
  17.      * @ORM\Column(name="id", type="integer")
  18.      * @ORM\Id
  19.      * @ORM\GeneratedValue(strategy="AUTO")
  20.      */
  21.     private $id;
  22.  
  23.     /**
  24.      * @var integer $cedula
  25.      *
  26.      * @ORM\Column(name="cedula", type="integer")
  27.      */
  28.     private $cedula;
  29.  
  30.     /**
  31.      * Get id
  32.      *
  33.      * @return integer
  34.      */
  35.     public function getId()
  36.     {
  37.         return $this->id;
  38.     }
  39.  
  40.     /**
  41.      * Set cedula
  42.      *
  43.      * @param integer $cedula
  44.      * @return Acudiente
  45.      */
  46.     public function setCedula($cedula)
  47.     {
  48.         $this->cedula = $cedula;
  49.    
  50.         return $this;
  51.     }
  52.  
  53.     /**
  54.      * Get cedula
  55.      *
  56.      * @return integer
  57.      */
  58.     public function getCedula()
  59.     {
  60.         return $this->cedula;
  61.     }
  62.    
  63.    
  64.     /**
  65.      * @var string $username
  66.      *
  67.      * @ORM\Column(name="username", type="string", length=255)
  68.      */
  69.     private $username;
  70.  
  71.     /**
  72.      * @var string $password
  73.      *
  74.      * @ORM\Column(name="password", type="string", length=255)
  75.      */
  76.     private $password;
  77.  
  78.     /**
  79.      * @ORM\Column(name="salt", type="string", length=255)
  80.      */
  81.     protected $salt;
  82.    
  83.    
  84.      public function eraseCredentials() {
  85.        
  86.     }
  87.  
  88.     public function getPassword() {
  89.         return $this->password;
  90.     }
  91.  
  92.     public function getRoles() {
  93.         return $this->user_roles->toArray();
  94.     }
  95.  
  96.     public function getSalt() {
  97.         return $this->salt;
  98.     }
  99.  
  100.     public function getUsername() {
  101.         return $this->username;
  102.     }
  103. }