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

fetch dentro de fetch zend_db_statement

Estas en el tema de fetch dentro de fetch zend_db_statement en el foro de Zend en Foros del Web. Hola amigos, tengo problemas con mostrar los datos de mi db cuando hago un Zend_Db_Statement::fetch() dentro de otro Zend_Db_Statement::fetch(), lo que eh testeado es que ...
  #1 (permalink)  
Antiguo 14/05/2011, 17:04
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 7 meses
Puntos: 12
Pregunta fetch dentro de fetch zend_db_statement

Hola amigos,

tengo problemas con mostrar los datos de mi db cuando hago un Zend_Db_Statement::fetch() dentro de otro Zend_Db_Statement::fetch(), lo que eh testeado es que cuando hago el segundo fetch me sobreescribe la primera y solo me muestra el cliente de la primera factura y son mas registros, ya eh intentado usando Zend_Db_Statement::fetchAll() pero personalmente trato de no usarlo porque me hace lo mismo (el while guardando todo en un array y lo hace un poco mas lento), este es el codigo.

Código PHP:
Ver original
  1. $ventaModel = new Application_Model_Venta();
  2. $facturas = $ventaModel->getFactura($filter); // retorna Zend_Db_Statement_Mysqli
  3.  
  4. $clienteModel = new Application_Model_Cliente();
  5.  
  6. while($row = $facturas->fetch()){
  7.     $cliente = $clienteModel->getCliente($row)->fetch(); // retorna stdClass
  8.     print_r($cliente);
  9.     echo '<br /><br />';
  10. }

estoy usando la ultima version de zend (1.11),
gracias de antemano sus respuestas .
__________________
El querer... es poder!!
  #2 (permalink)  
Antiguo 14/05/2011, 21:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: fetch dentro de fetch zend_db_statement

¿Podrías mostrar tus modelos para ver que es lo que hacen?

Saludos.
  #3 (permalink)  
Antiguo 15/05/2011, 10:44
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 7 meses
Puntos: 12
Respuesta: fetch dentro de fetch zend_db_statement

ok,

este es de venta:
Código PHP:
Ver original
  1. <?php
  2. class Application_Model_Venta extends Zend_Db_Table_Abstract {
  3.     protected $_name = 'rz_venta';
  4.  
  5.     public function getFactura(stdClass $filter = null){
  6.         $select = $this->select();
  7.        
  8.         return $select->query();
  9.     }
  10. }
y este del cliente:
Código PHP:
Ver original
  1. <?php
  2. class Application_Model_Cliente extends Zend_Db_Table_Abstract {
  3.     protected $_name = 'rz_cliente';
  4.  
  5.     public function getCliente(stdClass $filter = null){
  6.         $select = $this->select();
  7.  
  8.         if(isset($filter->cliente_id) && $filter->cliente_id > 0)
  9.             $select->where('cliente_id = ?', $filter->cliente_id);  
  10.         return $select->query();
  11.     }
  12. }
__________________
El querer... es poder!!
  #4 (permalink)  
Antiguo 15/05/2011, 15:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: fetch dentro de fetch zend_db_statement

No entiendo bien cual es el problema, pero el fetch dentro de while te va a traer solamente un resultado, los modelos no deberian extender directamente de Zend_DB_Table_Abstract, en todo caso debería ser algo así;

Código PHP:
Ver original
  1. class Application_Model_DbTable_Cliente extends Zend_Db_Table_Abstract
  2. {}

y deberías definir las relaciones.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 16/05/2011, 14:56
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 7 meses
Puntos: 12
Respuesta: fetch dentro de fetch zend_db_statement

claro solamente que yo me ahorro estar escribiendo _DbTable y no importa la ruta donde este porque igual estoy extendiendo de Zend_Db_Table_Abstract, y cuando quito el fetch del cliente me trae todas las facturas.
Código PHP:
Ver original
  1. while($row = $facturas->fetch()){
  2.     print_r($row);
  3.     echo '<br /><br />';
  4. }
__________________
El querer... es poder!!
  #6 (permalink)  
Antiguo 16/05/2011, 15:39
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: fetch dentro de fetch zend_db_statement

En realidad la ruta importa, no te da problemas porque el autoloader busca dentro de models, models/DbTable, esta separación no es por capricho, un modelo no debería estar atado a la persistencia, ahora con respecto al error, hay algo que no me cierra y es el Statement, que adapter estas utilizando ?, podes postear la config ?, porque con PDO_MYSQL funciona sin problemas.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 17/05/2011, 09:32
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 7 meses
Puntos: 12
Respuesta: fetch dentro de fetch zend_db_statement

claro que Models_DbTable busca en models/DbTable pero el autoloader no sabe a la clase que va a extender, y a que te refieres con persistencia?, estoy usando mysqli.

Código:
resources.db.adapter = mysqli
resources.db.params.host = localhost 
resources.db.params.username = admin_tienda
resources.db.params.password =  
resources.db.params.dbname = tienda
resources.db.charset = utf8
resources.db.isDefaultTableAdapter = 1
resources.db.options.fetchMode = OBJ
saludos.
__________________
El querer... es poder!!
  #8 (permalink)  
Antiguo 18/05/2011, 06:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: fetch dentro de fetch zend_db_statement

Es un bug uselox, en mysqli para poder ejecutar statements simultaneos hay que utilizar store_result, Zend_Db_Statement_Mysqli, hace uso de esto y en el orden correcto, no debería fallar, es algo extraño.

La solución rápida es traerse todos los registros, osea hacer el fetchAll e iterar, o sino algo mejor utilizar PDO_MYSQL, porque utilizas mysqli ?

Con respecto a la persistencia, te dejo una referencia.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 19/05/2011, 13:48
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 7 meses
Puntos: 12
Respuesta: fetch dentro de fetch zend_db_statement

si es un bug,

cuando uso el metodo Zend_Db_Select::query() el cual llama a Zend_Db_Adapter_Mysqli::query() el cual llama a Zend_Db_Adapter_Mysqli::prepare() es aqui cuando se sobreesbribe la instancia del statement actual

Código PHP:
Ver original
  1. public function prepare($sql){
  2.     $this->_connect();
  3.  
  4.     if ($this->_stmt) { // verifica si ya existe algun statement
  5.         $this->_stmt->close(); // si es asi lo cierra
  6.     }
  7.  
  8.     $stmtClass = $this->_defaultStmtClass;
  9.     if (!class_exists($stmtClass)) {
  10.         require_once 'Zend/Loader.php';
  11.         Zend_Loader::loadClass($stmtClass);
  12.     }
  13.  
  14.     $stmt = new $stmtClass($this, $sql);
  15.     if ($stmt === false) {
  16.         return false;
  17.     }
  18.  
  19.     $stmt->setFetchMode($this->_fetchMode);
  20.     $this->_stmt = $stmt; // no es usado en nada mas que cerrarme el statement actual que mala onda!!
  21.     return $stmt;
  22. }

ahora lo que hice es comentar esas lineas o simplemente extender este metodo.

uso mysqli porque tengo varias aplicaciones corriendo con mysqli y no quiero habilitar PDO, alguna razon para usar PDO?
y la persistencia no tiene nada que ver con el autoloader .

Saludos.
__________________
El querer... es poder!!

Última edición por uselox; 19/05/2011 a las 13:54
  #10 (permalink)  
Antiguo 19/05/2011, 14:01
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: fetch dentro de fetch zend_db_statement

Cita:
Iniciado por uselox Ver Mensaje
uso mysqli porque tengo varias aplicaciones corriendo con mysqli y no quiero habilitar PDO, alguna razon para usar PDO?
Al ser el mas utilizado es el menos propenso a bugs o al menos estos se detectan y resuelven mas rápido.

Cita:
Iniciado por uselox Ver Mensaje
y la persistencia no tiene nada que ver con el autoloader .
En que momento he dicho que el autoloader tenga algo que ver con la persistencia ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 20/05/2011, 12:45
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 7 meses
Puntos: 12
Respuesta: fetch dentro de fetch zend_db_statement

entoncs a que te referias con persistencia?
__________________
El querer... es poder!!

Etiquetas: db-statement, fetch, frameworks-y-php-orientado-a-objetos
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:58.