Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/05/2011, 11:21
RatoN7
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años, 7 meses
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