2011-12-03 9 views
21

Escribo mi propio ORM simplemente usando PDO. Mi pregunta es si puede forzar el método PDOStatement::fetchAll() para devolver una matriz de objetos de stdClass? Por ejemplo:Cómo forzar a PDOStatement-> fetchAll a devolver una matriz de objetos?

$result = $q->fetch_all(/* some magic here */); 
print_r($result); 

debe imprimir algo como:

Array 
(
    [0] => stdClass Object 
     (
      [NAME] => pear 
      [COLOUR] => green 
     ) 

    [1] => stdClass Object 
     (
      [NAME] => watermelon 
      [COLOUR] => pink 
     ) 

) 

¿Es posible este? NAME y COLOR son, por supuesto, nombres de columnas. Leí documentación pero no encontré nada interesante.

+0

no creo que lea la documentación con suficiente claridad: "PDO :: FETCH_OBJ: devuelve un objeto anónimo con nombres de propiedades que corresponden a los nombres de columna devuelto en el resultado de su establecer " –

Respuesta

44

Uso $result = $q->fetchAll(PDO::FETCH_OBJ);

+1

Oh mi. Extraño esto en la documentación. Pensé que esto solo era sobre el primer nivel (arreglos en mi caso). Gracias. – Elektryk

+1

Nada, pero el PDO tiene varios modos, incluso define un nombre de un objeto definido getters, vea PDO :: FETCH_CLASS –

+1

Es una buena práctica cuando se demuestra una característica documentada como un indicador para un argumento de función para agregar un enlace a la página de documentación que menciona esta bandera o copie y pegue los bits necesarios para los documentos en sí. –

0

También debe ser capaz de hacer lo siguiente:

$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request 

Con cualquier solicitud posterior fetch puede omitir explícitamente especificando el modo.

$stmt->setFetchAll(); //returns an array of objects 
8

Esto se hace:

<?php 
$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

$result = $q->fetchAll(PDO::FETCH_OBJ); 
//$result contains an array of stdObjects 
?> 

Sin embargo aún más genial manera es conseguir DOP para crear instancias de una clase propia y poblar las propiedades:

Ejemplo # 4 instanciar una clase para cada resultado

El siguiente ejemplo demuestra el comportamiento nuestro del estilo de búsqueda PDO :: FETCH_CLASS.

<?php 
class fruit { 
    public $name; 
    public $colour; 
} 

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit"); 
//$result contains an array of fruit objects 
?> 

Fuente: http://www.php.net/manual/en/pdostatement.fetchall.php

Cuestiones relacionadas