Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Propel no inserta objeto como FK

Estas en el tema de Propel no inserta objeto como FK en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, estoy haciendo el insert de un registro en una tabla que posee claves foráneas. Si bien soy nuevo con Propel, entiendo que para hacer ...
  #1 (permalink)  
Antiguo 23/12/2012, 16:25
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 16 años, 2 meses
Puntos: 26
Propel no inserta objeto como FK

Buenas, estoy haciendo el insert de un registro en una tabla que posee claves foráneas.

Si bien soy nuevo con Propel, entiendo que para hacer ese tipo de inserts, no tengo que poner el id de la FK como en SQL puro, sino, que tengo que colocar la instancia de la tabla que contiene la FK.

En mi tabla usuarios tengo las siguientes FK: idinstitucion, idtipodedocumento, idestadocivil.
Con las últimas 2, no tuve problemas en hacer:
Código PHP:
$usuario->setTiposdedocumento(TiposdedocumentoQuery::create()->findPk($_GET['tipoDocumento']));
$usuario->setEstadocivil(EstadocivilQuery::create()->findPk($_GET['estadoCivil'])); 
Pero con las instituciones hago:
Código PHP:
$institucion InstitucionesQuery::create()->findPk($_GET['institucion']);
$usuario->setIdinstituciondefault($institucion); 
Y PHP me devuelve el siguiente error:
Cita:
Notice: Object of class Instituciones could not be converted to int in /media/Datos/www/ManantialesAdm/build/classes/manantialesv2/om/BaseUsuarios.php on line 598
Revisé en BaseUsuarios.php cómo realiza los setters de las FK y en los 3 casos hace el mismo procedimiento.
En dónde puede estar el problema ?.
  #2 (permalink)  
Antiguo 23/12/2012, 16:45
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: Propel no inserta objeto como FK

el error esta claro aunque no he usado propel el setter espera un int y tu le estas pasando el objeto completo, deberias de hacer entonces algo como esto
Código PHP:
Ver original
  1. $institucion = InstitucionesQuery::create()->findPk($_GET['institucion']);
  2. $usuario->setIdinstituciondefault($institucion->id);  //o el nombre del campo que le quieres pasar de manera que le pases lo que el necesita y no el objeto completo, 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
  #3 (permalink)  
Antiguo 23/12/2012, 16:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Propel no inserta objeto como FK

Independientemente de lo que comenta carlos, creo que los setters que muestras dada su firma no son lo mismo, en el caso de un objeto no deberías llamar a setInstitucionDefault ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 23/12/2012, 17:38
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: Propel no inserta objeto como FK

es que leyendo un poco sobre las relaciones de propel, en teoría lo que hace no es incorrecto, el problema esta (creo yo por el error que esta dando) en como esta declarada la relación o incluso ver si la tiene declarada, ya que lo que indica pareciera que no, ya que le esta pidiendo el int del id de la relación y normalmente uno pasa es el objeto completo de la entidad, pero sería cuestión de que revisara bien, 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 23/12/2012, 17:45
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Propel no inserta objeto como FK

Creo que Propel genera los dos setters el tema es que en el caso que le lanza el error esta llamando al setter del id y no de la entidad como hace en los dos primeros casos que si le funcionan, de todas formas si lees la doc el setter de la entidad es un shortcut al setter del id...
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 24/12/2012, 12:26
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 16 años, 2 meses
Puntos: 26
Respuesta: Propel no inserta objeto como FK

Carlos, entiendo lo que indica el error. Incluso viendo la implementación del método parecería ilógico mandar el objeto como parámetro. Pero en los 2 casos anteriores y en los ejemplos de la documentación, así funciona.
Dejo el código del BaseUsuarios.php donde está definida la clase, en especial la parte de la institución:
Código PHP:
    /**
     * The value for the idinstituciondefault field.
     * Note: this column has a database default value of: 0
     * @var        int
     */
    
protected $idinstituciondefault;

/**
     * Set the value of [idinstituciondefault] column.
     *
     * @param int $v new value
     * @return Usuarios The current object (for fluent API support)
     */
    
public function setIdinstituciondefault($v)
    {
        if (
$v !== null) {
            
$v = (int) $v;
        }

        if (
$this->idinstituciondefault !== $v) {
            
$this->idinstituciondefault $v;
            
$this->modifiedColumns[] = UsuariosPeer::IDINSTITUCIONDEFAULT;
        }

        if (
$this->aInstituciones !== null && $this->aInstituciones->getIdinstitucion() !== $v) {
            
$this->aInstituciones null;
        }


        return 
$this;
    } 
  #7 (permalink)  
Antiguo 24/12/2012, 12:35
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 16 años, 2 meses
Puntos: 26
Respuesta: Propel no inserta objeto como FK

Aparentemente lo solucioné. En base a sus comentarios comencé a leer la API de la clase Usuario. Y comprendí que el método para relacionar los objetos es sin el "id" como prefijo. Es decir, para insertar un objeto institución como relación debería utilizar:
Código PHP:
Ver original
  1. $usuario->setInstituciones($objetoDeTipoInstitucion);
Ahora si yo quiero insertar solo el id, debo utilizar el método que postee al comienzo.
Desde ya muchas gracias !.

Etiquetas: inserta, objeto, php, propel, 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 11:31.