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
Probalo y fijate haciendo un print_r de lo que devuelve para que te des cuenta lo que digo.
Haahah mentira son bromas, pero hay maneras y maneras de decir las cosas ¿no crees?
Suerte!
Ya que no lo encuentro por ningun lado.
Abrazo
$this->select()
->where ( 'campo like ? ', " '%$variable%' " )
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??
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.
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.



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