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

Problema con entity generada por doctrine

Estas en el tema de Problema con entity generada por doctrine en el foro de Symfony en Foros del Web. Buenas tengo el siguiente problema, hice la generación de mis entity por medio del comando @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código consola: Ver original doctrine:mapping:import MiBundle annotation y ...
  #1 (permalink)  
Antiguo 23/11/2011, 08:14
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
Problema con entity generada por doctrine

Buenas tengo el siguiente problema, hice la generación de mis entity por medio del comando
Código consola:
Ver original
  1. doctrine:mapping:import MiBundle annotation
y me lo genero fino, luego tube que crear otra entity que salio a ultima hora, cuando le doy el
Código consola:
Ver original
  1. doctrine:schema:update
tanto el --force como el --dump-sql me da el siguiente error
Cita:
[Doctrine\ORM\ORMException]
Column name `campo` referenced for relation from MiBundle\Entity\Inscripcion towards MiBundle\Entity\AlumnoDatosAcademicos does not exist.
lo mas barbaro es que esas dos entity me las genero automáticamente doctrine cuando hice el impor, y si se fijan
Entity Inscripción
Código PHP:
<?php

namespace MiBundleEntity
;

use 
DoctrineORMMapping as ORM;

/**
 * Secretaria\TaquillaBundle\Entity\Inscripcion
 *
 * @ORM\Table(name="inscripcion")
 * @ORM\Entity
 */
class Inscripcion
{
    
/**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string $seccion
     *
     * @ORM\Column(name="seccion", type="string", length=10, nullable=false)
     */
    
private $seccion;

    
/**
     * @var string $observacion
     *
     * @ORM\Column(name="observacion", type="string", length=200, nullable=true)
     */
    
private $observacion;

    
/**
     * @var AlumnoDatosAcademicos
     *
     * @ORM\ManyToOne(targetEntity="AlumnoDatosAcademicos")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="cedula", referencedColumnName="cedula")
     * })
     */
    
private $cedula;

    
/**
     * @var Horario
     *
     * @ORM\ManyToOne(targetEntity="Horario")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="bloque_fin", referencedColumnName="id")
     * })
     */
    
private $bloqueFin;

    
/**
     * @var Carreras
     *
     * @ORM\ManyToOne(targetEntity="Carreras")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="carrera_inscrita", referencedColumnName="codigo_carrera")
     * })
     */
    
private $carreraInscrita;

    
/**
     * @var Horario
     *
     * @ORM\ManyToOne(targetEntity="Horario")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="blogque", referencedColumnName="id")
     * })
     */
    
private $blogque;

    
/**
     * @var CondicionNotas
     *
     * @ORM\ManyToOne(targetEntity="CondicionNotas")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="condicion", referencedColumnName="codigo")
     * })
     */
    
private $condicion;

    
/**
     * @var PeriodosAcademicos
     *
     * @ORM\ManyToOne(targetEntity="PeriodosAcademicos")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="periodo_academico", referencedColumnName="id")
     * })
     */
    
private $periodoAcademico;

    
/**
     * @var Materias
     *
     * @ORM\ManyToOne(targetEntity="Materias")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="codigo_materia", referencedColumnName="codigo")
     * })
     */
    
private $codigoMateria;



    
/**
    * GETTER AND SETTER
    */
}
Entity AlumnoDatosAcademicos
Código PHP:
<?php

namespace SecretariaTaquillaBundleEntity
;

use 
DoctrineORMMapping as ORM;

/**
 * Secretaria\TaquillaBundle\Entity\AlumnoDatosAcademicos
 *
 * @ORM\Table(name="alumno_datos_academicos")
 * @ORM\Entity
 */
class AlumnoDatosAcademicos
{
    
/**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var date $fechaIngreso
     *
     * @ORM\Column(name="fecha_ingreso", type="date", nullable=false)
     */
    
private $fechaIngreso;

    
/**
     * @var string $activo
     *
     * @ORM\Column(name="activo", type="string", length=2, nullable=false)
     */
    
private $activo;

    
/**
     * @var string $becado
     *
     * @ORM\Column(name="becado", type="string", length=2, nullable=false)
     */
    
private $becado;

    
/**
     * @var string $institucionBeca
     *
     * @ORM\Column(name="institucion_beca", type="string", length=100, nullable=false)
     */
    
private $institucionBeca;

    
/**
     * @var string $atleta
     *
     * @ORM\Column(name="atleta", type="string", length=2, nullable=false)
     */
    
private $atleta;

    
/**
     * @var string $institucionAtleta
     *
     * @ORM\Column(name="institucion_atleta", type="string", length=100, nullable=false)
     */
    
private $institucionAtleta;

    
/**
     * @var AlumnoDatosPersonales
     *
     * @ORM\ManyToOne(targetEntity="AlumnoDatosPersonales")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="cedula", referencedColumnName="cedula")
     * })
     */
    
private $cedula;

    
/**
     * @var Carreras
     *
     * @ORM\ManyToOne(targetEntity="Carreras")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="codigo_carrera", referencedColumnName="codigo_carrera")
     * })
     */
    
private $codigoCarrera;

    
/**
     * @var CondicionEstudiante
     *
     * @ORM\ManyToOne(targetEntity="CondicionEstudiante")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="condicion_estudiante", referencedColumnName="codigo")
     * })
     */
    
private $condicionEstudiante;

    
/**
     * @var ModalidadIngreso
     *
     * @ORM\ManyToOne(targetEntity="ModalidadIngreso")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="modo_ingreso", referencedColumnName="codigo")
     * })
     */
    
private $modoIngreso;

    
/**
     * @var Pensum
     *
     * @ORM\ManyToOne(targetEntity="Pensum")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="pensum", referencedColumnName="id")
     * })
     */
    
private $pensum;
/**
* GETTER AND SETTER
*/
}
probe agregarle esta annotation
Código PHP:
* @ORMOneToMany(targetEntity="Inscrpcion"mappedBy="AlumnoDatosAcademicos"
a la propiedad cedula de alumno_datos_academicos a ver si era falta de la annotation de relacion pero nada, saludos y de antemano gracias por la ayuda que me puedan birndar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #2 (permalink)  
Antiguo 23/11/2011, 08:42
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Problema con entity generada por doctrine

recuerda que para las relaciones ManyToOne debes especificar un campo de entidad inversa, porque inscripción es el lado propietario de la relación.

además en AlumnoDatosAcademicos si cedula es un campo único, lo estás referenciando recursivamente a la misma entidad ¿eso es correcto?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 23/11/2011, 08:55
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: Problema con entity generada por doctrine

si es lo que estoy viendo maycol, tengo que revisar bien lo que me genero doctrine, creo que eso lo solucione agregandole el @ORM\Id, a la cedula, aunque no entiendo porque doctrine no me lo genero si lo tengo como unique en la base de datos y segun lo que lei del mapping:import te lo genera a partir de la base de datos, tengo otro error por eso no estoy seguro de que lo haya solucionado, pero ya es con un auto_increment, ahora lo que tu me indicas es como lo estava haciendo ayer, antes de encontrarme con que podia hacer el mapping:import, haciendo el mappingBy y en su respectiva entity relacion el inversedBy, pero otra vez me quejo, si lo genere con el mapping:import no deberia doctrine generarme esta annotation??, de verdad ayer lo estava hacindo a piesito porque no habia visto la referencia, pero son 37 tablas que tengo en este sistema y de verdad cuando vi que tenia una herramienta que me genera las 37 entities claro que corri para alla aunque veo que como que voy a tener que ponerme a revisar bien una por una, porque como que hay annotaciones que no me genero correctamente
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 23/11/2011, 10:09
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Problema con entity generada por doctrine

¿leíste la letra pequeña? , el parser de Doctrine tiene un 80% de efectividad, así que no confíes ciegamente en él, saludos
he aquí un problema similar:
http://www.forosdelweb.com/f68/probl...mfony2-959506/
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 23/11/2011, 10:17
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: Problema con entity generada por doctrine

WTF, yo voy a hacer entonces mi broma a piesito, aunque sean 37 tablas,porque de verdad ya me tiene arr.... este, cada vez que soluciono algo, me sale otro error y eso que como te dije las entities las genero el mismo Doctrine, esta muy interesante lo que ofrece pero hay que ver como se mejora (mas pa los que de porsi cometen mil y un errores sin el parser como yo XD), 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
  #6 (permalink)  
Antiguo 23/11/2011, 10:23
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Problema con entity generada por doctrine

sí, es una pena que el de D2 sea tan malo, aunque corregir los desperfectos puede ser mejor que crear, a mano, 37 entities.

pero recuerda que crear el modelo básicamente lo haces una vez, y luego añades los ajustes, en mi caso como lo creé desde 0 no tuve inconvenientes, excepto tablas especificas que utiliza Asterisk como CDR, dónde tuve que indicarle a D2 específicamente como las quiero para que Asterisk pueda insertar data, ejemplo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace Entity;
  4.  
  5. use \Doctrine\Common\Collections\ArrayCollection;
  6.  
  7. /**
  8.  * Cdr Model
  9.  *
  10.  * @Entity(repositoryClass="Entity\Repository\CdrRepository")
  11.  * @Table(name="cdr", indexes={
  12.  *   @index(name="billsec_idx", columns={"billsec"}),
  13.  *   @index(name="calldate_idx", columns={"calldate"}),
  14.  *   @index(name="dst_idx", columns={"dst"}),
  15.  *   @index(name="src_idx", columns={"src"})
  16.  * })
  17.  * @author maycolalvarez
  18.  */
  19. class Cdr_Model extends Base_Model
  20. {
  21.     /**
  22.      * @Id
  23.      * @Column(type="integer", nullable=false)
  24.      * @GeneratedValue(strategy="IDENTITY")
  25.      * La estrategia IDENTITY genera en POSTGRES el campo tipo SERIAL y el SEQUENCE por defecto
  26.      */
  27.     protected $id;
  28. //...
  29. }
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

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 10:57.