Foros del Web » Programando para Internet » PHP » CodeIgniter »

Doctrine 2 como añadir un campo mas a un detalle de tabla

Estas en el tema de Doctrine 2 como añadir un campo mas a un detalle de tabla en el foro de CodeIgniter en Foros del Web. Hola a todos estoy comenzando con doctrine 2 y trabajando con codeigniter, la estructura es el siguiente: tengo una entidad llamada user.php Código PHP: <?php ...
  #1 (permalink)  
Antiguo 08/12/2011, 18:44
 
Fecha de Ingreso: noviembre-2011
Ubicación: peru
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Pregunta Doctrine 2 como añadir un campo mas a un detalle de tabla

Hola a todos

estoy comenzando con doctrine 2 y trabajando con codeigniter, la estructura es el siguiente:
tengo una entidad llamada user.php

Código PHP:
<?php

namespace models
;

use 
DoctrineORMMapping as ORM;

/**
 * models\User
 *
 * @Table(name="user")
 * @Entity(repositoryClass="models\repositories\UserRepository")
 */
class User
{
    
/**
     * @var integer $id
     *
     * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string $username
     *
     * @Column(name="username", type="string", length=32, precision=0, scale=0, nullable=false, unique=true)
     */
    
private $username;

    
/**
     * @OneToMany(targetEntity="Usuarioxperfil", mappedBy="userr")
     */
    
private $usuarioper;


    
/**
     * @var string $password
     *
     * @Column(name="password", type="string", length=64, precision=0, scale=0, nullable=false, unique=false)
     */
    
private $password;

    
/**
     * @var string $email
     *
     * @Column(name="email", type="string", length=255, precision=0, scale=0, nullable=false, unique=true)
     */
    
private $email;


    
/**
     * Get id
     *
     * @return integer 
     */

    
public function __construct() {
    
$this->usuarioper = new DoctrineCommonCollectionsArrayCollection();
       }

    public function 
getId()
    {
        return 
$this->id;
    }

    
/**
     * Set username
     *
     * @param string $username
     */
    
public function setUsername($username)
    {
        
$this->username $username;
    }

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

    
/**
     * Set password
     *
     * @param string $password
     */
    
public function setPassword($password)
    {
        
$this->password $password;
    }

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

    
/**
     * Set email
     *
     * @param string $email
     */
    
public function setEmail($email)
    {
        
$this->email $email;
    }

    
/**
     * Get email
     *
     * @return string 
     */
    
public function getEmail()
    {
        return 
$this->email;
    }
}
la siguiente entidad es:

perfil.php
Código PHP:
<?php

namespace models
;

use 
DoctrineORMMapping as ORM;

/**
 * models\Perfil
 *
 * @Table(name="perfil")
 * @Entity(repositoryClass="models\repositories\PerfilRepository")
 */
class Perfil
{
    
/**
     * @var integer $id
     *
     * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string $nombre
     *
     * @Column(name="nombre", type="string", length=125, precision=0, scale=0, nullable=false, unique=false)
     */
    
private $nombre;

    
/**
     * @OneToMany(targetEntity="Usuarioxperfil", mappedBy="perfill")
     */
    
private $userper;

    
/**
     * @var text $fecha
     *
     * @Column(name="fecha", type="date", precision=0, scale=0, nullable=false, unique=false)
     */
    
private $fecha;

    
/**
     * @ManyToMany(targetEntity="Menu", mappedBy="perfils")
     */
    
private $menuse;

    public function 
__construct(){
        
$this->menuse=new DoctrineCommonCollectionsArrayCollection();
        
$this->userper = new DoctrineCommonCollectionsArrayCollection();
    }

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

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

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

    
/**
     * Set fecha
     *
     * @param date $fecha
     */
    
public function setFecha($fecha)
    {
        
$this->fecha $fecha;
    }

    
/**
     * Get fecha
     *
     * @return date 
     */
    
public function getFecha()
    {
        return 
$this->fecha;
    }

    
/**
     * Add menuse
     *
     * @param models\Menu $menuse
     */
    
public function addMenu(modelsMenu $menuse)
    {
        
$this->menuse[] = $menuse;
    }

    
/**
     * Get menuse
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    
public function getMenuse()
    {
        return 
$this->menuse;
    }
}
y eh creado una entidad usuarioxperfil.php q seria el detalle donde quiero añadir un campo mas

Código PHP:
<?php

namespace models
;

use 
DoctrineORMMapping as ORM;

/**
 * models\Perfil
 *
 * @Table(name="perfil")
 * @Entity(repositoryClass="models\repositories\PerfilRepository")
 */
class Perfil
{
    
/**
     * @var integer $id
     *
     * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string $nombre
     *
     * @Column(name="nombre", type="string", length=125, precision=0, scale=0, nullable=false, unique=false)
     */
    
private $nombre;

    
/**
     * @OneToMany(targetEntity="Usuarioxperfil", mappedBy="perfill", cascade={"persist","remove","merge"}, orphanRemoval=true)
     */
    
private $userper;

    
/**
     * @var text $fecha
     *
     * @Column(name="fecha", type="date", precision=0, scale=0, nullable=false, unique=false)
     */
    
private $fecha;

    
/**
     * @ManyToMany(targetEntity="Menu", mappedBy="perfils")
     */
    
private $menuse;

    public function 
__construct(){
        
$this->menuse=new DoctrineCommonCollectionsArrayCollection();
        
$this->userper = new DoctrineCommonCollectionsArrayCollection();
    }

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

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

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

    
/**
     * Set fecha
     *
     * @param date $fecha
     */
    
public function setFecha($fecha)
    {
        
$this->fecha $fecha;
    }

    
/**
     * Get fecha
     *
     * @return date 
     */
    
public function getFecha()
    {
        return 
$this->fecha;
    }

    
/**
     * Add menuse
     *
     * @param models\Menu $menuse
     */
    
public function addMenu(modelsMenu $menuse)
    {
        
$this->menuse[] = $menuse;
    }

    
/**
     * Get menuse
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    
public function getMenuse()
    {
        return 
$this->menuse;
    }
}
la cual al actualizar mi bd por consola me genera el siguiente error:

[Doctrine\ORM\MappingException]
No identifier/primary key specified for Entity 'models\Usuarioxperfil'. Every Entity
must have an identifier/primary key.

que estoy haciendo mal??

gracias por su respuesta
  #2 (permalink)  
Antiguo 08/12/2011, 19:36
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Doctrine 2 como añadir un campo mas a un detalle de tabla

no colocaste la entidad usuarioxperfil que es la que te da el error publicaste dos veces la entidad perfil
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 09/12/2011, 00:38
 
Fecha de Ingreso: noviembre-2011
Ubicación: peru
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Respuesta: Doctrine 2 como añadir un campo mas a un detalle de tabla

ohh me equivoque aqui esta ..

usuarioxperfil
Código PHP:
<?php
namespace models
;

use 
DoctrineORMMapping as ORM;

/**
 * models\Usuarioxperfil
 *
 * @Table(name="usuarioxperfil")
 * @Entity(repositoryClass="models\repositories\UsuarioxperfilRepository")
 */
class Usuarioxperfil
{
    
/**
     * @ManyToOne(targetEntity="user", inversedBy="usuarioxperfil")
     * @JoinColumn(name="id_usuario", referencedColumnName="id")
     */
    
private $userr;

    
/**
     * @ManyToOne(targetEntity="perfil", inversedBy="usuarioxperfil")
     * @JoinColumn(name="id_perfil", referencedColumnName="id")
     */
    
private $perfill;

    
/**
     * @var text $fecha
     *
     * @Column(name="fecha", type="date", precision=0, scale=0, nullable=false, unique=false)
     */
    
private $fecha;
    
}
  #4 (permalink)  
Antiguo 09/12/2011, 06:34
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Doctrine 2 como añadir un campo mas a un detalle de tabla

como te indica la excepcion de doctrine tu entidad carece de clave primaria, el estandar aunque a algunos no nos guste es que todas las tablas tengan un PK, si tu tabla no tiene ningun campo que pueda establecerse como tal debes de generar un id
Código PHP:
Ver original
  1. /**
  2.      * @var integer $id
  3.      *
  4.      * @ORM\Column(name="id", type="integer", nullable=false)
  5.      * @ORM\Id
  6.      * @ORM\GeneratedValue(strategy="IDENTITY")
  7.      */
  8.      private $id;
prueba y nos comentas, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 09/12/2011, 23:56
 
Fecha de Ingreso: noviembre-2011
Ubicación: peru
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Respuesta: Doctrine 2 como añadir un campo mas a un detalle de tabla

ps añadiendo ese campo si normal!!!! pero se supone q el detalle solo maneja llaves foraneas...
este pk esta demas.. lo que necesito hacer es un detalle donde no me genere ese pk se puede hacer ello con doctrine 2???


cualquier ayuda esta bienvenida gracias!!!!!
  #6 (permalink)  
Antiguo 10/12/2011, 09:29
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Doctrine 2 como añadir un campo mas a un detalle de tabla

el problema es que no estas manejando la relacion many to many, sino que estas creandu tu mismo la tabla y generando relacion many to one con esta, prueba con la relacion manytomany de la manera que lo indica la documentacion y nos indicas si te funciona asi, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 10/12/2011, 15:17
 
Fecha de Ingreso: noviembre-2011
Ubicación: peru
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Respuesta: Doctrine 2 como añadir un campo mas a un detalle de tabla

Ps si me fue muy bien doctrine me genera el detalle perola pregunta va comoañadir a ese detalle un campo mas ..por ello esq intente generando una entitad mas como detalle pero comolo mostre necesita de un pk la cual yo no quiero q eso se genere porq es un detalle ..... :s
gracias por su respuesta

Etiquetas: doctrine2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:27.