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

[SOLUCIONADO] insertar campos referenciados con Doctrine 2

Estas en el tema de insertar campos referenciados con Doctrine 2 en el foro de Zend en Foros del Web. Hola: tengo este registro: Código PHP:      public function  addPermisos ( $datos ){          $per  = new  ApplicationEntityPermisos ();          $per -> setHistousuario ( $datos [ 'histousuario' ...
  #1 (permalink)  
Antiguo 06/06/2013, 14:36
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
insertar campos referenciados con Doctrine 2

Hola:

tengo este registro:
Código PHP:
    public function addPermisos($datos){
        
$per = new ApplicationEntityPermisos();
        
$per->setHistousuario($datos['histousuario']);
        
$per->setMenu($datos['menu']);
        
$per->setRole($datos['role']);
        
$per->setFecha($this->date->get('YYYY-MM-dd H:m:s'));
        
$per->setEstado('A');
        
$this->em->persist($per);
        
$this->em->flush();
        
    } 
pero setHistousuario esta referenciado a otra tabla "histousuario", asi que me esta enviando este mensaje:

Cita:
Catchable fatal error: Argument 1 passed to Application\Entity\Permisos::setHistousuario() must be an instance of Application\Entity\Histousuario, integer given, called in C:\xampp\htdocs\proyecto\library\Application\Entit y\Repositories\PermisosRepository.php on line 53 and defined in C:\xampp\htdocs\proyecto\library\Application\Entit y\Permisos.php on line 154
com debo entonces guardar dicho campo, puesto que el valor ya lo tengo en $datos['histousuario']
  #2 (permalink)  
Antiguo 06/06/2013, 15:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar campos referenciados con Doctrine 2

Pues sí te fijas el error, no es por el valor, si no que setHistousuario espera una entidad Histousuario y tú le estas pasando un entero, tienes que ya sea extraer la entidad por ese valor del entity manager o crear una nueva y pasarla a setHistousuario.

Saludos.
  #3 (permalink)  
Antiguo 06/06/2013, 15:34
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: insertar campos referenciados con Doctrine 2

Lo siento, la verdad no comprendo bien,
Cita:
tienes que ya sea extraer la entidad por ese valor del entity manager o crear una nueva y pasarla a setHistousuario
te refieres a algo asi?

'SELECT m.id FROM \Application\Entity\Permisos p JOIN p.menu m JOIN p.role r WHERE r.id ='. $id

lo que hago aqui es extraer un valor de menu cuando buscando por medio de Permisos, en mi caso deseo agregar registros donde ya obtengo valores para agregarlos, con entonces puedo extraer la entidad por ese valor?
  #4 (permalink)  
Antiguo 06/06/2013, 15:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar campos referenciados con Doctrine 2

No, tienes que de alguna manera recuperar la entidad Histousuario que tenga el valor que tienes en $datos['histousuario'], eso lo haces ya sea usando el EntityManager o con un DQL pero necesitas la entidad, ya que tengas la entidad Histousuario, esa es la que le debes de pasar al setHistousuario en lugar del valor plano.

Saludos.
  #5 (permalink)  
Antiguo 06/06/2013, 16:11
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: insertar campos referenciados con Doctrine 2

te refieres a algo asi?
Código PHP:
Ver original
  1. $query = $this->em->createQuery('SELECT h.id FROM \Application\Entity\Histousuario h WHERE h.id = '.$datos['histousuario']);
  2.         $per = new \Application\Entity\Permisos();
  3.         $per->setHistousuario(query);
pero no logro resolverlo
  #6 (permalink)  
Antiguo 06/06/2013, 16:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar campos referenciados con Doctrine 2

No, me refiero a que tienes que sacar la entidad del entity manager, necesitas la entidad Histousuario que corresponde a ese valor, y ese es el que le pasas a setHistousuario.

Saludos.
  #7 (permalink)  
Antiguo 06/06/2013, 16:28
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: insertar campos referenciados con Doctrine 2

Voy buscando la forma de sacar la Entidad de entity manager, pero no se como, por favor si pudieras explicarme con un simple ejemplo, te lo agradecería mucho
  #8 (permalink)  
Antiguo 06/06/2013, 16:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar campos referenciados con Doctrine 2

¿Como no vas a saber si es lo básico que haces con Doctrine?

Código PHP:
Ver original
  1. $Histousuario = $em->find('Application\Entity\Histousuario', $datos['histousuario']);
  2.  
  3. $per->setHistousuario($Histousuario);
  #9 (permalink)  
Antiguo 06/06/2013, 16:39
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: insertar campos referenciados con Doctrine 2

jaja, son cosas, si estaba en la punta de mis narices, gracias
  #10 (permalink)  
Antiguo 06/06/2013, 16:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar campos referenciados con Doctrine 2

Igual no te caería mal ver el manual de Doctrine para que sepas como trabajar con Doctrine de forma sencilla, los pasos para sacar entidades de un repositorio, persistir, lazy-loading, etc.

No es muy complicado y te va a ayudar a mitigar estos problemas.

Saludos.
  #11 (permalink)  
Antiguo 06/06/2013, 17:58
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: insertar campos referenciados con Doctrine 2

Para tu caso puedes utilizar EntityManager::getReference y ahorrarte la query a histousuario ;)
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: campos, doctrine
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 05:35.