Foros del Web » Programando para Internet » PHP »

PHP OO Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificadas

Estas en el tema de Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificadas en el foro de PHP en Foros del Web. Hola gente tengo para hacerles una consulta. Estoy haciendo una consulta a la base de datos mediante el uso de PDO. Una vez que consigo ...
  #1 (permalink)  
Antiguo 09/03/2012, 17:37
 
Fecha de Ingreso: mayo-2003
Ubicación: Mar del Plata
Mensajes: 373
Antigüedad: 20 años, 10 meses
Puntos: 0
Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificadas

Hola gente tengo para hacerles una consulta.
Estoy haciendo una consulta a la base de datos mediante el uso de PDO.

Una vez que consigo los resultados, hago lo siguiente

$roles = $stmt->fetchALL(PDO::FETCH_CLASS, 'Rol');

Para que todos los resultados que me trae de la base de datos los devuelva como un arreglo de objetos 'Rol'.
Esto funciona barbaro porque cuando hago un gettype de cada objeto de $roles me devuelve 'Rol'.

El problema esta en que yo necesito que mantenga los tipos de datos, $id por ejemplo, necesito que sea un integer. Pero todas las propiedades de los objetos Rol son strings.

La pregunta es, como puedo castear cada una de las propiedades de los Roles para que mantenga el tipo de dato y no me devuelva todo como strings?

Gracias de antemano!
  #2 (permalink)  
Antiguo 09/03/2012, 17:46
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificad

Que tal fedexx,

No creo que sea un problema de PDO, estas controlando y casteando en tu modelo o puedes setear cualquier tipo de dato a las propiedades ?, postea el modelo para ver como lo tienes hecho.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 09/03/2012, 17:51
 
Fecha de Ingreso: mayo-2003
Ubicación: Mar del Plata
Mensajes: 373
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificad

Hola masterpuppet antes que nada muchas gracias por responder.

Perdón por la ignorancia pero no entendí que quisiste preguntarme. de todas formas aca posteo el modelo:

Código PHP:
<?php
Class Rol
{
    
/**
     * 
     * @var int
    */
    
public $id;
    
/**
     * 
     * @var int
    */
    
public $padre;
    
/**
     * 
     * @var string
    */
    
public $nombre;    
    
/**
     * 
     * @var array[Rol]
    */
    
public $children;    
}
?>
  #4 (permalink)  
Antiguo 10/03/2012, 06:01
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificad

Tienes varios problemas, el primero, para controlar lo que sea setea necesitas mutators(setters), luego tienes el problema de como funciona PDO::FETCH_CLASS, la única forma de interceptar el seteo de las propiedades es que estas no existan y se dispare el método mágico __set, con lo que tu clase quedaría algo así(voy a utilizar solo un par de propiedades):

Código PHP:
Ver original
  1. class Role
  2. {
  3.     /**
  4.      * @var array
  5.      */
  6.     private $data = array('id' => null, 'name' => '');
  7.  
  8.     /**
  9.      * @param integer $id
  10.      * @return Role provide fluent interface
  11.      */
  12.     public function setId($id)
  13.     {
  14.         $this->data['id'] = (int)$id;
  15.         return $this;
  16.     }
  17.  
  18.     /**    
  19.      * @return integer $id
  20.      */
  21.     public function getId()
  22.     {
  23.         return $this->data['id'];
  24.     }
  25.  
  26.     /**
  27.      * @param string $name
  28.      * @return Role provide fluent interface
  29.      */
  30.     public function setName($name)
  31.     {
  32.         $this->data['name'] = (string)$name;
  33.         return $this;
  34.     }
  35.  
  36.     /**    
  37.      * @return string
  38.      */
  39.     public function getName()
  40.     {
  41.         return $this->data['name'];
  42.     }    
  43.    
  44.     /**
  45.      * @param string $property
  46.      * @param mixed $value
  47.      */    
  48.     public function __set($property, $value)
  49.     {
  50.         $method = 'set' . ucfirst($property);
  51.         if(!method_exists($this, $method)){
  52.             throw new BadMethodCallException();
  53.         }
  54.         $this->$method($value);
  55.     }
  56. }

Espero el ejemplo te sirva para que al menos captes la idea, de todas formas si bien en tu lugar utilizaría un mapper en vez de PDO::FETCH_CLASS, tener las propiedades en un array no es lo mas adecuado, a la clase le quedaría por definir __get, __isset y __unset

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 10/03/2012, 06:57
 
Fecha de Ingreso: mayo-2003
Ubicación: Mar del Plata
Mensajes: 373
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificad

masterpupppet Gracias por responder tan claramente.
Voy a ponerme a leer sobre este tema para ver qu encuentro en internet me diste una muy buena punta como para comenzar.

Saludos y gracias nuevamente!

Etiquetas: fetch_class, pdo
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:50.