Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[Doctrine 2] Insertar nuevo registro

Estas en el tema de [Doctrine 2] Insertar nuevo registro en el foro de Bases de Datos General en Foros del Web. Hola.. Estoy probando algo muy simple.. insertar un nuevo registro, pero no veo el problema: Código PHP: $favouriteBook  = new  UserFavouriteBook ; $favouriteBook -> user_id  =  ...
  #1 (permalink)  
Antiguo 27/02/2011, 07:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 16 años, 2 meses
Puntos: 1
Pregunta [Doctrine 2] Insertar nuevo registro

Hola..

Estoy probando algo muy simple.. insertar un nuevo registro, pero no veo el problema:

Código PHP:
$favouriteBook = new UserFavouriteBook;
$favouriteBook->user_id 5;
$favouriteBook->book_id 8;
$favouriteBook->created_at = new DateTime("now");

$this->_em->persist($favouriteBook);
$this->_em->flush(); 
Error: Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

- Si hago un dump a $favouriteBook, efectivamente estan los datos correspondientes

- La entidad FavouriteBook es así:

Código PHP:
    /** @Column(type="integer")
     * @Id
     */
    
private $user_id;

    
/** @Column(type="integer")
     * @Id
     */
    
private $book_id;

    
/**
     * @ManyToOne(targetEntity="Book", inversedBy="usersFavourite")
     * @JoinColumn(name="book_id", referencedColumnName="id")
     */
    
private $book;

    
/**
     * @ManyToOne(targetEntity="User", inversedBy="favouriteBooks")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    
private $user;

    
/** @Column(type="datetime") */
    
private $created_at;

    public function 
__get($property) {
        return 
$this->$property;
    }
     
    public function 
__set($property$value) {
        
$this->$property $value;
    } 
También, he provado a insertarlo desde el usuario, ya que se supone que es el propietario de la clase FavouriteBook .. o esas cosas que tiene Doctrine 2.. pero, al hacer el flush(), evidentemente, me saltaba el error de que el usuario ya existía.. así que no lo veo claro..

A alguien le ha pasado? .. o alguna idea que probar?
  #2 (permalink)  
Antiguo 27/02/2011, 08:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: [Doctrine 2] Insertar nuevo registro

No hay valor ingresado que se vaya a asignar al campo "user_id" y el campo en su tabla está definido como NOT NULL.
No podemos saber por donde está el problema exactamente porque no estás posteando el código SQL que genera la operación DML que falla. Este no es un foro de programación, no se debe poner código no SQL (normas del foro), porque para los problemas de programación hay foros específicos, en los cuales se solucionan esos dilemas mejor y más rápido.
Revisa tus procesos y fíjate donde está fallando la carga de ese valor, o postea los códigos SQL que si son relevantes para nosotros, para poder revisar si está todo OK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/02/2011, 09:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: [Doctrine 2] Insertar nuevo registro

Ostras, tienes razón, he hubicado mal el hilo, podrías moverlo a "Frameworks y PHP orientado a objetos" ?

Creo que sería el lugar correcto.. no creo que falle la sentencia sql que general Doctrine 2..

Gracias, y disculpas.
  #4 (permalink)  
Antiguo 27/02/2011, 09:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: [Doctrine 2] Insertar nuevo registro

No problem.
El error suele producirse sobre todo con los de PHP, porque no se fijan que en realidad el link de MySQL en el foro de PHP es un link a otro foro (icono con flecha verde) y no un subforo (icono de logo FDW)..
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/03/2011, 09:17
 
Fecha de Ingreso: junio-2010
Mensajes: 24
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [Doctrine 2] Insertar nuevo registro

Para que Doctrine 2 utiliza un valor generado para los identificadores tienes que utilizar la etiqueta @GeneratedValue, de esta forma por ejemplo si estás trabajando con MySQL genera un AUTO_INCREMENT.


/** @Column(type="integer")
* @Id
* @GeneratedValue
*/
private $user_id;


PD: Perdona, no he contestado exactamente a tu duda, había leido mal. El problema que está pasando aquí es que estas confundiendo la forma de trabajar de Doctrine 2. Si te fijas la propiedad $user es la propiedad que almacena el usuario relacionado con ese libro y es la propiedad que doctrine 2 utiliza para la columna user_id de la tabla. Tienes que añadir un usuario a esa propiedad no a user_id.

Etiquetas: doctrine2, insert
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 01:10.