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

Consulta en dos tablas

Estas en el tema de Consulta en dos tablas en el foro de Zend en Foros del Web. Que tal, amigos muy buenas. En esta oportunidad les voy a pedir nuevamente su ayuda: Tengo dos tablas, usuarios y programa: usuarios con los campos ...
  #1 (permalink)  
Antiguo 02/03/2011, 09:29
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Consulta en dos tablas

Que tal, amigos muy buenas. En esta oportunidad les voy a pedir nuevamente su ayuda:
Tengo dos tablas, usuarios y programa:
usuarios con los campos usu_id, usu_nombre y usu_apellido
programas con los campos pro_id, pro_nombre, usu_id

lo que pretendo hacer es la siguiete consulta sql:

Código PHP:
$query "select u.usu_id, u.usu_nombre, u.usu_apellido, p.pro_id, p.pro_nombre from usuarios u, programas p 
where u.usu_id=p.usu_id"

Con Zend_Db_Table sería algo como esto en mi modelo ProgramaModelo.php:

Código PHP:
public function obtenerTodos()
    {
         
$select $this->select()
                ->
from(array("p"=>"programa"),array())
                ->
join(array("u"=>"usuario"),
                        
"u.usu_id = p.usu_id",array());
        return 
$this->fetchAll($select);

En mi controller:

Código PHP:
...
$this->view->listado $this->_programaModelo->obtenerTodos();
... 
Hasta ahí todo bien, pero cuando quiero mostrar la tabla programas en el View el nombre de usuario no me muestra

Código PHP:
...
<?php foreach($this->listado as $lista): ?>
            <tr>
                <td><?php echo $lista->pro_id ?></td>
                <td><?php echo $lista->pro_nombre ?></td>
                <td><?php echo $lista->usu_nombre ?>/td>
            </tr>
<?php endforeach; ?>
...
me salta el siguiente error:

Fatal error: Uncaught exception 'Zend_Db_Table_Row_Exception' with message 'Specified column "usu_nombre" is not in the row' in C:\xampp\php\PEAR\Zend\Db\Table\Row\Abstract.php:1 79 Stack trace: #0

Si le quito la fila <td><?php echo $lista->usu_nombre ?>/td>, no hay problema.
He intentado también agregar los campos en en join, algo como lo siguiente, pero tampoco funciona.

->join(array("u"=>"usuario"),
"u.usu_id = p.usu_id",array("usu_nombre"))

me sale el siguiente error:

Fatal error: Uncaught exception 'Zend_Db_Table_Select_Exception' with message 'Select query cannot join with another table' in C:\xampp\php\PEAR\Zend\Db\Table\Select.php:215 Stack trace: #0 C:\xampp\php\PEAR\Zend\Db\Adapter\Abstract.php(456 ):

ALGUIEN ME PUEDE AYUDAR, SE LO AGRADECERÍA MUCHO, GRACIAS DE ANTEMANO
  #2 (permalink)  
Antiguo 02/03/2011, 09:55
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta en dos tablas

Que tal RALlave,

no recuerdo bien porque hace tiempo que no uso Zend_Db, pero creo que el array vacio al final del join le dice que no queres campos de esa tabla, lo correcto es lo que te da el error, y para solucionarlo tenias que hacer algo asi:
Código PHP:
Ver original
  1. ...
  2. $select = $this->select()
  3.         ->setIntegrityCheck(false)
  4.         ->from(array('p'=> 'programa'), array())
  5.         ->join(array('u' => 'usuario'),  'u.usu_id = p.usu_id');
  6. ...

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 02/03/2011, 10:07
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Consulta en dos tablas

Ok maestro, funciono, te agradezco, adicione los campos que se quiere utilizar,

Código PHP:
$select $this->select()
                ->
setIntegrityCheck(false)
                ->
from(array("p"=>"programa"),array("pro_id""pro_nombre""pro_hora""pro_sw"))
                ->
join(array("u"=>"usuario"),
                        
"u.usu_id = p.usu_id",array("usu_nombre""usu_apellido"));
        return 
$this->fetchAll($select); 
y en el view:

Código PHP:
<?php echo $lista->usu_apellido." ".$lista->usu_nombre ?>
Para el que le sirva....
  #4 (permalink)  
Antiguo 10/03/2011, 22:01
 
Fecha de Ingreso: enero-2004
Ubicación: Medellin
Mensajes: 178
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Consulta en dos tablas

Si lo dejas son el array, te devuelve todos los datos

Etiquetas: dos, tablas
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 11:13.