Foros del Web » Programando para Internet » PHP » Zend »

fetchOne y fetchRow

Estas en el tema de fetchOne y fetchRow en el foro de Zend en Foros del Web. Hola Porque Zend_Db_Table no implementa los métodos fetchOne y fetchRow, o no existen dichos métodos para los modelos en ZF. Saludos...
  #1 (permalink)  
Antiguo 17/02/2011, 11:09
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 11 años, 9 meses
Puntos: 2
fetchOne y fetchRow

Hola


Porque Zend_Db_Table no implementa los métodos fetchOne y fetchRow, o no existen dichos métodos para los modelos en ZF.

Saludos
  #2 (permalink)  
Antiguo 17/02/2011, 11:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años
Puntos: 2135
Respuesta: fetchOne y fetchRow

fetchOne pertenece a Zend_Db_Adapter, fetchRow sí esta para Zend_Db_Table_Abstract.

El problema con fetchOne es que Zend_Db_Table_Adapter implementa el patrón DataGateway, y regresa objetos del tipo Zend_Db_Table_Row_Abstract, si usas un fetchOne tendrías un objeto sin sus datos completos, y la idea es que cada row sea lo mismo que un row de la base de datos.

Saludos.
  #3 (permalink)  
Antiguo 17/02/2011, 11:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: fetchOne y fetchRow

OK gracias GatorV,

1.- me podras mostrar un "var_dump" de como retorna los datos fetchOne con (Zend_Db_Table_Row_Abstract).

2.- Otra cosa es que siempre tengo que usar fetchAll para ejecutar querys personalizadas, hay alguna forma de ejecutar esas query sin usar fetchAll, estaba leyendo que se podia usar Zend_Db_Statement y el metodo execute pasandole la query pero no se si es asi o no y como funciona o como devuelve los datos.

3.- Para tener disponible el objeto db, debo traerlo desde el bootstrap de esta forma
Código PHP:
Ver original
  1. $db = $this->getInvokeArg('bootstrap')->db;

Bootstrap Method
Código PHP:
Ver original
  1. protected function _initDatabase()
  2.     {
  3.         $this->bootstrap('db');
  4.         $db = $this->getResource('db');
  5.         Zend_Registry::set('db', $db);
  6.         Zend_Db_Table_Abstract::setDefaultAdapter($db);
  7.         return $db;
  8.     }

Saludos
  #4 (permalink)  
Antiguo 17/02/2011, 12:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años
Puntos: 2135
Respuesta: fetchOne y fetchRow

1.- fetchOne siempre te va a devolver el primer valor de la primera consulta, por ejemplo si es un string pues un string, si es un int un int. No existe el método fetchOne para Zend_Db_Table_Abstract solo existe para Zend_Db_Adapter.

2.- Si estas devolviendo objetos es necesario usar fetchAll, pero lo puedes hacer con un select por ejemplo:
Código PHP:
Ver original
  1. public function getNewUsersByDepartment($sDepartment)
  2. {
  3.          $Select = $this->select();
  4.          $Select->where('department=?', $sDeparment)
  5.                     ->where('status=new')
  6.                     ->order('id desc');
  7.  
  8.          return $this->fetchAll($Select);
  9. }

Como te digo si lo que tu haces es trabajar con tu Zend_Db_Table_Abstract de forma como debe de ser es necesario que uses fetchAll/fetchRow ya que estos siempre te van a devolver objetos "hijos" que representan rows en tu tabla.

Si lo que quieres es regresar arrays entonces no uses Zend_Db_Table_Abstract y crea un modelo simple que use Zend_Db_Adapter solamente.

3.- Si también lo pones en el registro puedes hacer un Zend_Registry::get() o usar Zend_Db_Table_Abstract::getDefaultAdapter() o usar el método getAdapter de Zend_Db_Table_Abstract.

Saludos.
  #5 (permalink)  
Antiguo 17/02/2011, 13:02
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: fetchOne y fetchRow

Correcto entiendo GatorV, si asi mismo lo estaba haciendo utilizando en todos los metodos donde necesito retornar datos de la BBDD lo hago con fetchAll(), de hecho he creado mi propio fetchOne ocupando fetchAll para ejecutar la query.

...
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 09:37.