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

Consulta y error al insertar datos Codeigniter2+Doctrine2

Estas en el tema de Consulta y error al insertar datos Codeigniter2+Doctrine2 en el foro de CodeIgniter en Foros del Web. Estimados, estoy probando con Codeigniter2+Doctrine2 y bueno he estado realizando el modelo, el cual al parecer está bien dado que Doctrine2 me pudo generar las ...
  #1 (permalink)  
Antiguo 04/04/2012, 10:04
 
Fecha de Ingreso: enero-2011
Ubicación: Montevideo
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 1
Consulta y error al insertar datos Codeigniter2+Doctrine2

Estimados, estoy probando con Codeigniter2+Doctrine2 y bueno he estado realizando el modelo, el cual al parecer está bien dado que Doctrine2 me pudo generar las tablas en forma correcta.

Pero a la hora de realizar o intentar realizar una mini carga de datos para ver que tal funciona, me da un error que en verdad nose donde puede estar el problema, seguramente sea un error mío pero no he dado con la tecla.

Voy a describir las clases involucradas y el index donde intento hacer las pruebas.

clase persona.php

Código:
<?php
 
namespace models\persistencia;
 
/**
 * @Entity
 * @Table(name="persona")
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discrP", type="string")
 * @DiscriminatorMap({"persona" = "Persona", "alumno" = "Alumno", "usuario" = "Usuario", "profesor" = "Profesor" })
 */

class Persona
{
        
    /**
    * @Id
    * @Column(type="integer", nullable=false)
    * @GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @Column(type="string", length=60)
    */
    private $nombre;

    /**
    * @Column(type="string", length=60)
    */
    private $apellido;

    /**
    * @Column(type="string", length=100)
    */
    private $direccion;	

    /**
    * @Column(type="string", length=30)
    */
    private $telefono;

    /**
    * @Column(type="string", length=30)
    */
    private $celular;

    /**
    * @Column(type="string", length=45)
    */
    private $mail;

    /**
    * @Column(type="integer", length=2)
    */
    private $sexo;

    /**
    * @Column(type="integer", length=3)
    */
    private $edad;

    /**
    * @Column(type="string", length=50)
    */
    private $foto;

    /**
    * @Column(type="integer", length=1)
    */
    private $habilitado;

    /**
    * @Column(type="date")
    */
    private $fechaCreado;

    /**
    * @ManyToOne(targetEntity="Localidad")
    * @JoinColumn(name="idLocalidad", referencedColumnName="id")
    */
    private $idLocalidad;

 //--------------------------- METODOS -----------------------------------------------------------   
    
    public function __construct(){
    }
    
    public function getId (){ return $this->id; }
   
    public function getNombre (){ return $this->nombre;}
    public function setNombre($nombre) { $this->nombre = $nombre; }  
    
    public function getApellido (){ return $this->apellido; }
    public function setApellido($apellido) { $this->apellido = $apellido; }
    
    public function getDireccion (){ return $this->direccion;}
    public function setDireccion($direccion) { $this->direccion = $direccion; }
    
    public function getTelefono (){ return $this->telefono; }
    public function setTelefono($telefono) { $this->telefono = $telefono;  }
    
    public function getCelular (){  return $this->celular; }
    public function setCelular($celular) { $this->celular = $celular;}
    
    public function getMail (){  return $this->mail; }
    public function setMail($mail) { $this->mail = $mail; }
    
    public function getSexo (){  return $this->sexo; }
    public function setSexo($sexo) { $this->sexo = $sexo;}
    
    public function getEdad (){ return $this->edad;  }
    public function setEdad($edad) { $this->edad = $edad;}
    
    public function getFoto (){ return $this->foto; }
    public function setFoto($foto) { $this->foto = $foto;  }
    
    public function getHabilitado (){ return $this->habilitado;}
    public function setHabilitado($habilitado) { $this->habilitado = $habilitado; }
    
    public function getFechaCreado (){ return $this->fechaCreado;}
    public function setFechaCreado($fechaCreado) { $this->fechaCreado = $fechaCreado; }
   
   public function getIdLocalidad (){ return $this->idLocalidad; }
   public function setIdLocalidad($idLocalidad) { $this->idLocalidad = $idLocalidad;   }
   
}
clase Usuario.php
Código:
<?php
 
namespace models\persistencia;
 
/**
 * @Entity
 * @Table(name="usuario")
 */

class Usuario extends Persona
{
    /**
    * @Id
    * @Column(type="integer", nullable=false)
    * @GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @Column(type="string", length=45)
    */
    private $password;
    
    /**
     * @OneToOne(targetEntity="TipoUsuario")
     * @JoinColumn(name="idTipoUsuario", referencedColumnName="id")
     */
    private $idTipoUsuario;
    
    /**
    * @OneToOne(targetEntity="Persona")
    * @JoinColumn(name="idPersona", referencedColumnName="id")
    */
    private $idPersona;
    
    /**
     * @ManyToMany(targetEntity="Grupete", mappedBy="materias")
     */
    private $grupetes;
      
    public function __construct() {
        
    }
    
    public function getId() { return $this->id; }
    public function setId($id) { $this->id = $id; }
    
    public function getPassword() {  return $this->password; }
    public function setPassword($password) { $this->password = $password; }
        
    public function getIdTipoUsuario() {  return $this->idTipoUsuario; }
    public function setIdTipoUsuario($idTipoUsuario) { $this->idTipoUsuario = $idTipoUsuario; }
    
    public function getIdPersona() {  return $this->idPersona; }
    public function setIdPersona($idPersona) { $this->idPersona = $idPersona; }
   
    public function getGrupetes() {  return $this->grupetes; }
    public function setGrupetes($grupetes) { $this->grupetes = $grupetes;  }

}
Clase Ciudad.php

Código:
<?php
 
namespace models\persistencia;
 
/**
 * @Entity
 * @Table(name="ciudad")
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discrCi", type="string")
 * @DiscriminatorMap({"ciudad" = "Ciudad", "localidad" = "Localidad"})
 */

class Ciudad
{
    /**
    * @Id
    * @Column(type="integer", nullable=false)
    * @GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @Column(type="string", length=45)
    */
    private $nombre;
	 
    public function __construct() {
     }
    
    public function getId() { return $this->id; }
    
    public function getNombre() {  return $this->nombre; }
    public function setNombre($nombre) { $this->nombre = $nombre; }
}
Clase Localidad.php
Código:
<?php
 
namespace models\persistencia;
 
/**
 * @Entity
 * @Table(name="localidad")
 */
class Localidad extends Ciudad
{
    /**
    * @Id
    * @Column(type="integer", nullable=false)
    * @GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @Column(type="string", length=45)
    */
    private $nombreLoc;
    
    /**
    * @OneToOne(targetEntity="Ciudad")
    * @JoinColumn(name="idCiudad", referencedColumnName="id")
    */
    private $idCiudad;
	 
    public function __construct() { }
        
    public function getId() { return $this->id; }
    
    public function getNombreLoc() {  return $this->nombreLoc; }
    public function setNombreLoc($nombreLoc) { $this->nombreLoc = $nombreLoc; }

    public function getIdCiudad() { return $this->idCiudad; }
    public function setIdCiudad($idCiudad) { $this->idCiudad = $idCiudad; }
    
}
Clase TipoUsuario.php
Código:
<?php
 
namespace models\persistencia;
 
/**
 * @Entity
 * @Table(name="tipo_usuario")
 */

class TipoUsuario
{
    /**
    * @Id
    * @Column(type="integer", nullable=false)
    * @GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @Column(type="string", length=60)
    */
    private $nombre;
	 
    public function __construct() { }
    
    public function getId() { return $this->id; }
    
    public function getNombre() {  return $this->nombre; }
    public function setNombre($nombre) { $this->nombre = $nombre;  }

}
...sigue como respuesta...
  #2 (permalink)  
Antiguo 04/04/2012, 10:05
 
Fecha de Ingreso: enero-2011
Ubicación: Montevideo
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta y error al insertar datos Codeigniter2+Doctrine2

y el código del index que intento hacer para cargar es el siguiente

Código:
function index() {
		 $data = array(
                    'titulo'=>'tituloooo',
                    'message'=> 'PROBANDOOOOOOOOOOO' );
		                  
                $ciudad     = new models\persistencia\Ciudad;
                $localidad  = new models\persistencia\Localidad;
                $tipoUser   = new models\persistencia\TipoUsuario;
                $person     = new models\persistencia\Persona;
		$user       = new models\persistencia\Usuario;
                
                $ciudad->setNombre("city");
                $localidad->setNombreLoc("city");
                $localidad->setIdCiudad($ciudad);
                           
                $tipoUser->setNombre('Usuario');

                $user->setNombre('prueba');
                $person->setApellido("pruebaA");
                $person->setDireccion("calle 5");
                $person->setTelefono("23423423");
                $person->setCelular("55699999");
                $person->setMail("[email protected]");
                $person->setSexo(1);
                $person->setEdad(55);
                $person->setFoto("/prueba/");
                $person->setHabilitado(1);
                $person->setFechaCreado(new \DateTime("now"));
                
                $person->setIdLocalidad($localidad);
                
                $user->setPassword("loilo");
                $user->setIdTipoUsuario($tipoUser);
                $user->setIdPersona($person);
                
              //  try{
                    $this->em->persist($ciudad); 
                    $this->em->persist($tipoUser); 
                    $this->em->persist($localidad); 
                    $this->em->persist($person);
                    $this->em->persist($user);

                    $this->em->flush(); 
              //  }  catch (Exception $exc){
              //      $data['error'] = $exc->getMessage();
              //  }
                
                $message = $person->getNombre();
                
                $data['nombre'] = $message;
				 
		//$data['message'] = $message;
                $this->load->view('home',$data);
	
		
	}
y el error que me da es el siguiente
Código HTML:
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nombre' cannot be null' in C:\wamp\www\portal\application\libraries\Doctrine\DBAL\Statement.php on line 131
( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nombre' cannot be null in C:\wamp\www\portal\application\libraries\Doctrine\DBAL\Statement.php on line 131
Reconozco que no he dado con ningun ejemplo de como cargar la herencia con Doctrine y Codeigniter, si con una página que utiliza Zymfony y doctrine2 y de ahí saque la idea de hacer las pruebas así, si está bien mejor, sino, agradezco me expliquen como debo hacer....
A modo de comentario, si realizo la prueba solo con tipousuario el mismo se persiste correctamente en la bd por lo que creo que el error lo estoy teniendo en la forma de realizar las pruebas.

Muchas gracias por la ayuda que me puedan brindar.
  #3 (permalink)  
Antiguo 04/04/2012, 10:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Consulta y error al insertar datos Codeigniter2+Doctrine2

Tienes que setear la propiedad nombre al objecto $person o bien si esta puede ser nula agregar nullable=true a la metadata de la propiedad y si usuario extiende de persona también debes setearle las propiedades que no sean nulas(apellido, dirección, teléfono, etc...).

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 04/04/2012, 11:15
 
Fecha de Ingreso: enero-2011
Ubicación: Montevideo
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta y error al insertar datos Codeigniter2+Doctrine2

uuu si acá fue error mio al agregar esta línea

$user->setNombre('prueba');
$person->setApellido("pruebaA");

En realidad el código correcto qen donde me da el error es con la línea

$person->setNombre('prueba');
$person->setApellido("pruebaA");

No entiendo como debo hacer con lo siguiente "usuario extiende de persona también debes setearle las propiedades que no sean nulas(apellido, dirección, teléfono, etc...)"

Te agradeceria un pequeño ejemplo.


partiendo ahora de acá, donde más le estoy errando?

Gracias
  #5 (permalink)  
Antiguo 04/04/2012, 11:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Consulta y error al insertar datos Codeigniter2+Doctrine2

Debes setear todas las propiedades obligatorios, estas seteando:

Código PHP:
Ver original
  1. $user->setPassword("loilo");
  2. $user->setIdTipoUsuario($tipoUser);
  3. $user->setIdPersona($person);

donde esta el resto(nombre, apellido, etc...) ?

Código PHP:
Ver original
  1. $user->setNombre('prueba');
  2. $user->setApellido("pruebaA");
  3. $user->setDireccion("calle 5");
  4. ....
  5. $user->setPassword("loilo");
  6. $user->setIdTipoUsuario($tipoUser);
  7. $user->setIdPersona($person);
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 04/04/2012, 12:44
 
Fecha de Ingreso: enero-2011
Ubicación: Montevideo
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta y error al insertar datos Codeigniter2+Doctrine2

Cita:
Iniciado por masterpuppet Ver Mensaje
Debes setear todas las propiedades obligatorios, estas seteando:

Código PHP:
Ver original
  1. $user->setPassword("loilo");
  2. $user->setIdTipoUsuario($tipoUser);
  3. $user->setIdPersona($person);

donde esta el resto(nombre, apellido, etc...) ?

Código PHP:
Ver original
  1. $user->setNombre('prueba');
  2. $user->setApellido("pruebaA");
  3. $user->setDireccion("calle 5");
  4. ....
  5. $user->setPassword("loilo");
  6. $user->setIdTipoUsuario($tipoUser);
  7. $user->setIdPersona($person);
a ok, si ya lo había probado así tambien y me da lo mismo.
evidentemente en algo le estoy errando, es decir

Código:
$user->setNombre('prueba');
                $user->setApellido("prueball");
                $user->setDireccion("direccion");
                $user->setTelefono("44345345");
                $user->setCelular("56665456");
                $user->setMail("[email protected]");
                $user->setSexo(1);
                $user->setEdad(21);
                $user->setFoto("c:/");
                $user->setHabilitado(1);
                $user->setFechaCreado(new \DateTime("now"));
                
                $user->setIdLocalidad($localidad);
                
                $user->setPassword("loilo");
                $user->setIdTipoUsuario($tipoUser);
               //$user->setIdPersona($person); este campo acepta nulo por eso no lo pongo en esta prueba
o sea al estar heredando la clase Persona desde Usuario, no entendía necesario instanciarlo , dado que la carga la realizo desde Usuario, al no funcionarme utilice la forma indicada más arriba que la había visto en una foro de symfony donde se utilizaba doctrine2.

En realidad he probado de todo un poco y no hay caso, reconozco que en algún lado le estoy errando, pero no encuentro donde.

te agradezco me vuelvas a indicar donde estoy fallando.
  #7 (permalink)  
Antiguo 06/04/2012, 20:51
 
Fecha de Ingreso: enero-2011
Ubicación: Montevideo
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta y error al insertar datos Codeigniter2+Doctrine2

Cita:
Iniciado por pixma_uy Ver Mensaje
a ok, si ya lo había probado así tambien y me da lo mismo.
evidentemente en algo le estoy errando, es decir

Código:
$user->setNombre('prueba');
                $user->setApellido("prueball");
                $user->setDireccion("direccion");
                $user->setTelefono("44345345");
                $user->setCelular("56665456");
                $user->setMail("[email protected]");
                $user->setSexo(1);
                $user->setEdad(21);
                $user->setFoto("c:/");
                $user->setHabilitado(1);
                $user->setFechaCreado(new \DateTime("now"));
                
                $user->setIdLocalidad($localidad);
                
                $user->setPassword("loilo");
                $user->setIdTipoUsuario($tipoUser);
               //$user->setIdPersona($person); este campo acepta nulo por eso no lo pongo en esta prueba
o sea al estar heredando la clase Persona desde Usuario, no entendía necesario instanciarlo , dado que la carga la realizo desde Usuario, al no funcionarme utilice la forma indicada más arriba que la había visto en una foro de symfony donde se utilizaba doctrine2.

En realidad he probado de todo un poco y no hay caso, reconozco que en algún lado le estoy errando, pero no encuentro donde.

te agradezco me vuelvas a indicar donde estoy fallando.

Al final dí con el problema del error.

A las clases que heredaban les estaba seteando (por bolu...) los id de la clase padre ej. $user->setIdPersona($person);
obviamente esto causaba el error al momento de ingresar los datos, sea cual fuese la manera (las cuales habían sido muchas y hasta de forma erronea, tal como se posteo inicialmente).

Gracias

Etiquetas: tabla, usuarios
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 00:57.