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 originalnamespace 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 originalnamespace 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 originalnamespace 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;
}
}