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
namespace User\userBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\DiscriminatorColumn; use Doctrine\ORM\Mapping\DiscriminatorMap; use \Symfony\Component\Security\Core\User\UserInterface; /** * User\userBundle\Entity\User * * @ORM\Table(name = "tbl_user") * @ORM\Entity(repositoryClass="User\userBundle\Entity\UserRepository") * * @InheritanceType("JOINED") * @DiscriminatorColumn(name="discr", type="string") * @DiscriminatorMap({"user" = "User", "administrator" = "Admin\adminBundle\Entity\Administrator", "acudiente" = "Acudiente\acudienteBundle\Entity\Acudiente"}) */ class User implements UserInterface { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string $primerNombre * * @ORM\Column(name="primerNombre", type="string", length=255) */ private $primerNombre; /** * @var string $primerApellido * * @ORM\Column(name="primerApellido", type="string", length=255) */ private $primerApellido; /** * @ORM\ManyToMany(targetEntity="User\userBundle\Entity\role") * @ORM\JoinTable(name="rel_user_role", joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}) */ protected $user_roles; public function __construct() { $this->user_roles = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set primerNombre * * @param string $primerNombre * @return User */ public function setPrimerNombre($primerNombre) { $this->primerNombre = $primerNombre; return $this; } /** * Get primerNombre * * @return string */ public function getPrimerNombre() { return $this->primerNombre; } public function getRoles() { return $this->user_roles->toArray(); }
ahora tengo la clase administrador:
Código PHP:
Ver original
namespace Admin\adminBundle\Entity; use Doctrine\ORM\Mapping as ORM; use backEnd\backEndBundle\Entity\User; use \Symfony\Component\Security\Core\User\UserInterface; /** * Admin\adminBundle\Entity\Administrator * * @ORM\Table(name= "tbl_administrador") * @ORM\Entity(repositoryClass="Admin\adminBundle\Entity\AdministratorRepository") */ class Administrator extends User { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var integer $cedula * * @ORM\Column(name="cedula", type="integer") */ private $cedula; /** * @var \DateTime $fechaIngreso * * @ORM\Column(name="fechaIngreso", type="date") */ private $fechaIngreso; /** * @var string $username * * @ORM\Column(name="username", type="string", length=255) */ private $username; /** * @var string $password * * @ORM\Column(name="password", type="string", length=255) */ private $password; /** * @var string $email * * @ORM\Column(name="email", type="string", length=255) */ private $email; /** * @ORM\Column(name="salt", type="string", length=255) */ protected $salt; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set cedula * * @param integer $cedula * @return Administrator */ public function setCedula($cedula) { $this->cedula = $cedula; return $this; } /** * Get cedula * * @return integer */ public function getCedula() { return $this->cedula; } /** * Set fechaIngreso * * @param \DateTime $fechaIngreso * @return Administrator */ public function setFechaIngreso($fechaIngreso) { $this->fechaIngreso = $fechaIngreso; return $this; } /** * Get fechaIngreso * * @return \DateTime */ public function getFechaIngreso() { return $this->fechaIngreso; } /** * Set email * * @param string $email * @return Administrator */ public function setEmail($email) { $this->email = $email; return $this; } /** * Get email * * @return string */ public function getEmail() { return $this->email; } public function eraseCredentials() { } public function getPassword() { return $this->password; } public function getRoles() { return $this->user_roles->toArray(); } public function getSalt() { return $this->salt; } public function getUsername() { return $this->username; } }
y por ultimo mi clase Acudiente:
Código PHP:
Ver original
namespace Acudiente\acudienteBundle\Entity; use Doctrine\ORM\Mapping as ORM; use User\userBundle\Entity\User; /** * Acudiente\acudienteBundle\Entity\Acudiente * * @ORM\Table(name= "tbl_acudiente") * @ORM\Entity(repositoryClass="Acudiente\acudienteBundle\Entity\AcudienteRepository") */ class Acudiente extends User { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var integer $cedula * * @ORM\Column(name="cedula", type="integer") */ private $cedula; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set cedula * * @param integer $cedula * @return Acudiente */ public function setCedula($cedula) { $this->cedula = $cedula; return $this; } /** * Get cedula * * @return integer */ public function getCedula() { return $this->cedula; } /** * @var string $username * * @ORM\Column(name="username", type="string", length=255) */ private $username; /** * @var string $password * * @ORM\Column(name="password", type="string", length=255) */ private $password; /** * @ORM\Column(name="salt", type="string", length=255) */ protected $salt; public function eraseCredentials() { } public function getPassword() { return $this->password; } public function getRoles() { return $this->user_roles->toArray(); } public function getSalt() { return $this->salt; } public function getUsername() { return $this->username; } }