Como mostrar el contenido de dos tablas relacionadas (hasMany)??

1,278 views
Skip to first unread message

Rexter (René Suárez)

unread,
Sep 6, 2009, 9:59:28 PM9/6/09
to CakePHP en Español
Tengo 2 tablas. Factura detalles

Necesito motras una lista de facturas, con las opciones ver detalles
de factura.

<?php
Class Factura extends AppModel {
var $name = 'Factura';
var $hasMany = array(
'Detalle' => array(
'className' => 'Detalle',
'foreignKey' => 'factura_id',
'dependent'=> true)
);
}
?>

<?php
Class Detalle extends AppModel {
var $name = 'Detalle';
var $belongsTo = array(
'Factura' => array(
'className' => 'Factura',
'foreignKey' => 'factura_id',
'dependent'=> true));
}
?>

al hacer clic en la opcion ver detalles de facturas (http://localhost/
sistema/facturas/view/) mostrar

<h1>Factura #<?php echo $Facturas['Factura']['numero']; ?></h1>
<br>
<table>
<tr>
<th>Codigo</th>
<th>Item</th>
<th>Cantidad</th>
<th>Precio</th>
</tr>
<tr>
<td>aqui se imprimr el detalle "Codigo"</td>
<td>aqui se imprimr el detalle "Item"</td>
<td>aqui se imprimr el detalle "Cantidad"</td>
<td>aqui se imprimr el detalle "Precio"</td>
<td>
</tr>
</table>

Como hago la consulta de las dos tablas para luego imprimirla en la
vista!!???

Fran Iglesias

unread,
Sep 7, 2009, 4:16:44 AM9/7/09
to cakep...@googlegroups.com
Hola,

El 07/09/2009, a las 3:59, Rexter (René Suárez) escribió:

> Como hago la consulta de las dos tablas para luego imprimirla en la
> vista!!???

si tienes correctamente asociados los modelos, al hacer (en el
controller)

$factura = $this->Factura->find('first', array('conditions' =>
array('Factura.numero' => $factura_id), 'recursive' => 1);

(Tambien:

$factura = $this->Factura->findById($factura_id);

)

en $factura obtendrás toda la información que quieres, para ver como
está organizada haz

debug($factura);

De todos modos, necesitarás leer el manual.

Fran Iglesias

unread,
Sep 7, 2009, 4:20:19 AM9/7/09
to cakep...@googlegroups.com
Hola de nuevo,

El 07/09/2009, a las 3:59, Rexter (René Suárez) escribió:

> Como hago la consulta de las dos tablas para luego imprimirla en la
> vista!!???

En el mensaje anterior puse las pautas para una sóla factura. Pero lo
mismo es aplicable para el listado:

$facturas = $this->Factura->find('all', array('recursive' => 1));

Y lo mismo, consulta el debug($facturas) y verás cómo viene
estructurada la información.

T.S.U. René Suárez

unread,
Sep 7, 2009, 10:45:40 AM9/7/09
to cakep...@googlegroups.com
Mil gracias!

Perfecto, la consulta funciona bien! pero no logro mostrar los datos.

solo se muetra $Facturas['Factura']['numero'], pero no lo gro mostrar los campos de los detalles de la factura.

como logro hacer esto?


<h1>Factura #<?php echo $Facturas['Factura']['numero']; ?></h1>
<br>
<table>
   <tr>
       <th>Codigo</th>
       <th>Item</th>
       <th>Cantidad</th>
       <th>Precio</th>
   </tr>
       <tr>
           <td>aqui se imprimr el detalle "Codigo"</td>
           <td>aqui se imprimr el detalle "Item"</td>
           <td>aqui se imprimr el detalle "Cantidad"</td>
           <td>aqui se imprimr el detalle "Precio"</td>
           <td>
       </tr>
</table>


Wladimir Chopite

unread,
Sep 8, 2009, 9:43:12 AM9/8/09
to cakep...@googlegroups.com
Tienes que pasarle la variable $factura a la vista.

Eso lo haces con el metodo set en el controller, una vez que ya has hecho la consulta y lo almacenaste en una variable llamada $facturas:

    $this->set ('facturas',$facturas);

Esa variable que le pasas es un array, por lo tanto debes extraer los datos mediante un bucle en la vista:

/// Codigo
<?php
    foreach ($facturas as $factura) {
?>         
      ///
      <?php echo $factura ['Factura']['numero']; ?>   
<?php    } ?> // y asi vas imprimiendo las facturas de tu consulta como lo necesites
/// Mas codigo


No se si me explico. Si no entiendes avisa....
--
Atentamente: Wladimir Chopite
                    0424 - 9700264

T.S.U. René Suárez

unread,
Sep 8, 2009, 10:35:30 AM9/8/09
to cakep...@googlegroups.com
Saludos!!! por fin logre mostrar los detalles de la factura!!! usando un ciclo logre imprimir los campos de la siguiente manera:

<?php echo $factura ['Detalle'][0]['codigo']; ?>
<?php echo $factura ['Detalle'][0]['descripcion']; ?>
<?php echo $factura ['Detalle'][0]['cantidad']; ?>
<?php echo $factura ['Detalle'][0]['precio']; ?>
<?php echo $factura ['Detalle'][1]['codigo']; ?>
<?php echo $factura ['Detalle'][1]['descripcion']; ?>
<?php echo $factura ['Detalle'][1]['cantidad']; ?>
<?php echo $factura ['Detalle'][1]['precio']; ?>

Antonio Gázquez

unread,
Sep 8, 2009, 11:13:37 AM9/8/09
to cakep...@googlegroups.com
Usa foreach, hombre que es mucho más cómodo!

<?php foreach($factura['Detalle'] as $detalle): ?>
<?php echo $detalle['codigo']; ?>
....
<?php endforeach; ?>

Y no olvides que puedes imprimir un array completo por si no sabes lo que tienes:

<?php pr($array); ?>

T.S.U. René Suárez

unread,
Sep 8, 2009, 10:55:51 PM9/8/09
to cakep...@googlegroups.com
Listo Antonio!!! mil gracias!!! logre hacer funcionar todo!!

2009/9/8 Antonio Gázquez <pitic...@gmail.com>
Reply all
Reply to author
Forward
0 new messages