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

Consulta en Zend_Db

Estas en el tema de Consulta en Zend_Db en el foro de Zend en Foros del Web. Holas, buen dia. Llevo poco en zend asi que por favor tenganme paciencia xD Tengo un modelo que extiende de Zend_Db_Table_Abstract, que es con lo ...
  #1 (permalink)  
Antiguo 03/05/2011, 11:21
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 24
Consulta en Zend_Db

Holas, buen dia.

Llevo poco en zend asi que por favor tenganme paciencia xD

Tengo un modelo que extiende de Zend_Db_Table_Abstract, que es con lo que manejo la tabla categorias para hacer el CRUD.
Esta tabla tiene de campos el id, el nombre de la categoria, y el id de la categoria padre(para poder tener subcategorias).
Ahora a lo que voy, en la pantalla principal de administracion de la tabla tengo una tabla html en donde puedo visualizar todos los registros, y lo que quiero hacer es que en vez de mostrar el padre_categoria_id me muestre el nombre de la categoria padre. Por ej:
En vez de traer de la db esto.. (muestro uno pero la idea es traer todos los registros)
categoria_id = 3
padre_categoria_id = 1
nombre_categoria = categoria_tres

Me gustaria que de la db me traiga
categoria_id = 3
nombre_categoria_padre = categoria_uno
nombre_categoria = categoria_tres

Por medio de phpMyAdmin pude lograr la consulta que deseo, es esta:
Código MySQL:
Ver original
  1. SELECT c1.categoria_id, c2.nombre_categoria AS nombre_categoria_padre, c1.nombre_categoria
  2. FROM categorias AS c1
  3. LEFT JOIN categorias c2 ON c1.padre_categoria_id = c2.categoria_id

Por medio de Zend lo que pude lograr en codigo es:
Código PHP:
Ver original
  1. $select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
  2.         $select->setIntegrityCheck(false);
  3.  
  4.         $select->from(
  5.                         array('c1' => 'categorias'),
  6.                         array('c1.categoria_id', 'nombre_categoria_padre' => 'c2.nombre_categoria', 'c1.nombre_categoria')
  7.                 )
  8.                 ->joinLeft('categorias AS c2', 'c2.categoria_id = c1.padre_categoria_id');
  9.  
  10.         return $this->fetchAll($select);

Pero no logro conseguirlo =/

Se puede lograr esto con Zend_Db_Table_Abstract?? o tendria que mandarle el SQL con otra clase?

Note que al definir los campos con from() igual selecciona los que no puse, o sea si pongo que seleccione solo el id, tambien selecciona el nombre y los demas campos, porque hace eso?

Otra cosa, como puedo ver el sql generado? por ej, en codeigniter tenes $this->output->enable_profiler(true) que te mostraba todas las consultas a la db.

Gracias
  #2 (permalink)  
Antiguo 03/05/2011, 11:50
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: Consulta en Zend_Db

Puedes hacer a modo de debug un simple echo (string) $select para ver el Select construido, o usar el Zend_Db_Profiler para ver los queries que se envían.

Saludos.
  #3 (permalink)  
Antiguo 03/05/2011, 12:19
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 24
Respuesta: Consulta en Zend_Db

Gracias GatorV

Ahi lo hice, y lo que esta generando es realmente extraño ¬¬ :
Código MySQL:
Ver original
  1. SELECT `categorias`.*, `c1`.`categoria_id`, `c2`.`nombre_categoria` AS `nombre_categoria_padre`, `c1`.`nombre_categoria`, `c2`.*
  2. FROM `categorias`
  3. INNER JOIN `categorias` AS `c1`
  4. LEFT JOIN `categorias` AS `c2` ON c2.categoria_id = c1.padre_categoria_id

El que no controlo es el metodo from(), pense que esto era para controlar el SELECT sql, pero ahora veo que no xD.

Como manejo el SELECT con Zend_Db_Table_Abstract?? no lo ubico en la documentacion, tal vez no se puede =/
  #4 (permalink)  
Antiguo 03/05/2011, 12:24
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: Consulta en Zend_Db

Lo que pasa es que para tu SELECT deberías de usar el Select de Zend_Db_Adapter, no el de Zend_Db_Table... por ejemplo:

Código PHP:
Ver original
  1. $select = $this->getAdapter()->select();
  2. $select->from(array('c1' => 'categorias'), array('c1.categoria_id', 'c1.nombre_categoria'))
  3.           ->joinLeft(array('c2' => 'categorias'), 'c2.categoria_id = c1.padre_categoria_id', array('nombre_categoria_padre' => 'c2.nombre_categoria'));
  4.  
  5. echo (string) $select;

Saludos.
  #5 (permalink)  
Antiguo 03/05/2011, 12:39
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 24
Respuesta: Consulta en Zend_Db

Ahi me salio, Gracias!!

Siempre para selects de este tipo(en otros use join con db_table) me conviene el Select del Zend_Db_Adapter, verdad?

Gracias de nuevo!
  #6 (permalink)  
Antiguo 03/05/2011, 12:54
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: Consulta en Zend_Db

Así es, ya que el de Zend_Db_Table, tiene varias restricciones ya que te regresa un juego de registros del tipo Zend_Db_Table_Row que son entidades que se pueden actualizar...

Saludos.
  #7 (permalink)  
Antiguo 03/05/2011, 13:05
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 24
Respuesta: Consulta en Zend_Db

Ya veo.. es que de tantas clases que tiene este framework confunde mucho.

Entonces tengo que acomodar algunos modelos.. xD

Gracias de nuevo!

Etiquetas: frameworks-y-php-orientado-a-objetos, zend-db
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 20:07.