August 14th, 2008 Category: Zend Framework
12 Comments »

Cuando hacemos una consulta a la base de datos con Zend_Db, nos devuelve un objeto, con mucha info que pocas veces usamos. Generalmente nosotros queremos que nuestro metodo devuelva un array o un objeto, con las columnas de la consultas, y no mas que eso.

Si queremos que solo devuelva los resultados, en un array, tenemos una propiedad que nos soluciona esto.

El objeto que devulve fetchRow, y fetchAll, tiene una propiedad llamada toArray, que te devuelve solo las columnas del objeto en un array.

De esta manera, si nosotros quisieramos por ejemplo en nuestro modelo, el resultado de un fetchRow guardarlo en un Json, podriamos hacer lo siguiente.

select()
            ->where('usuario_id = ?', $id);
        return $this->fetchRow($select)
            ->toArray();
    }
}
?>

Los que nos devuelve este ejemplo es un array con todas las columnas de nuestra tabla usuarios, donde el id del registro es igual al que le pasamos como parametro.


Invitame una Cerverza


Comentar


12 Responses

Carlos Aguilar 2008-08-15 01:50:31
Hola Pablo, corrigeme si me equivoco, pero para lo que tu estas proponiendo existe la funcion fetchMode en Zend_Db.

Si lo que necesitas es que te devuelva es un array, solo necesitas cambiar el fetchMode, en el caso de tu ejemplo, seria:

$this->setFetchMode(Zend_Db::FETCH_ASSOC);

el codigo anterior haria que te retornada el resultado en un array associativo.

Puedes ver las demas constantes en el manual de Zend_DB en el sitio de Zend Framework.

La funcion que tu dices esta muy bien, pero me parecio que era necesario mencionar la otra forma, ya que no se si se te escapo o no la mencionaste a proposito.

Saludos

Pablo Morales 2008-08-15 11:38:25
Ni, lo que yo buscaba es que solo me devuelva las columnas de la base, si yo hago lo que vos mencionas, me sigue llegando toda la info que no necesito. Con este metodo solo me devuelve el array con los resultados del fetchRow.

Probalo y fijate haciendo un print_r de lo que devuelve para que te des cuenta lo que digo.

Eduardo 2008-08-18 01:48:55
demasiado básico y 0 aporte, y aparte aprende a usar un framework de verdad como symfony.

Haahah mentira son bromas, pero hay maneras y maneras de decir las cosas ¿no crees?

Pablo Morales 2008-08-18 01:53:57
Jejeje. No era para que te enojes, siempre leo el blog, y es de los pocos que sobrevivieron a la limpieza del reader, realmente esta bueno. Pero me entusiasme con el titulo, y bue, nada. :P

Suerte!

Eduardo 2008-08-18 02:21:24
ajajaj bueno ¿amigos? :P

Pablo Morales 2008-08-18 11:44:19
Obvio suerte!

Gabriel 2009-02-20 21:37:59
Hola pablito, vuelvo a visitar tu BLOG. Queria saber si me sabes como hacer una consulta, en donde se pueda utilizar el LIKE como en SQL.

Ya que no lo encuentro por ningun lado.

Abrazo

Pablo Morales 2009-02-23 23:00:32
si queres usar ? podes hacer esto

$this->select()
->where ( 'campo like ? ', " '%$variable%' " )

jose 2010-02-19 09:31:45
pablo, estoy haciendo un ejercicio con arrayObject, en el indexController cargo la data con esta forma:
public function init()
{

$lista_usuarios = new ArrayObject();

$lista_usuarios->append(new Usuario(1, "jose", "perez"));
etc....

pero cuando ejecuto tengo el error de que la clase Usuario no existe. Pregunto, debo crear un clase en Model con la inicializacion del array??

Pablo Morales 2010-02-19 11:57:18
Hola @jose.

La clase tiene que estar en el path, para poder ejecutar el Autoload, sino esta, podes agregarlo, lo mas conveniente es que uses un namespaces mas claro. Por ejempo Model_Usuarios(), o podes incluir el archivo a mano con require_once.

Saludos.

jose 2010-02-19 12:02:27
gracias Pablo, tienes razon.

Carlos Ayala 2011-03-14 12:21:56
Hola, tengo problemas con Zend y no he encontrado una solucion.
Voy a probar suerte aqui.

Lo que sucede es que al efectuar la consulta me devuelve todas las columnas de la tabla, y yo quiero solo algunas.

Uso el ->from(nombre_tabla, array())

donde, en array coloco los campos de la tabla (segun el manual de zend), pero me devuelve todos los campos.

Incluso, si efectuo un join, tambien me agrega todas las columnas de la tabla referenciada en el join.

No logro de ninguna forma que me devuelva solo las columnas que yo quiero.