Sres:

A pesar de que me dieron la solucion, segui investigando porque no me
conforma como quedo el codigo. Se me hace que es muy especifico y
particular para mi caso. Como dije antes, debe haber ya un modelo de
hacer las cosas mas general para este tipo de situaciones y mas simple
de implementar sin hacer tantas referencias particulares a mis
modelos.

En el controlador me habia quedado asi...

function view($id = null) {
                if (!$id) {
                        $this->Session->setFlash(__('Invalid conexion', true));
                        $this->redirect(array('action' => 'index'));
                }
                $productos = $this->set('factura', $this->Factura->find('first',
array('conditions' =>
array('factura.id' => $id), 'contain' => array('Detallefactura' =>
array('Producto'),'Cliente'))));
        }

Y en el view.ctp en el lugar donde invocaba el campo producto me quedo
asi

<td><?php echo $detallefactura['Producto']['producto'];?></td>

Esto funciono perfecto.


Pero segui investigando y cambie por lo siguiente:

function view($id = null) {
                if (!$id) {
                        $this->Session->setFlash(__('Invalid conexion', true));
                        $this->redirect(array('action' => 'index'));
                }
                $this->Factura->recursive=2;
                $this->set('factura', $this->Factura->read(null, $id));
        }


Y en el view.ctp no se cambio nada, quedo la misma linea:

<td><?php echo $detalleconexion['Producto']['producto'];?></td>

Y me funciono perfecto!!!

El tema es que estoy usando recursive=2 para que me permita llegar al
campo producto. Por lo que aprendi, no es recomendable trabajar con
recursive en 2 porque baja el rendimiento.

En este caso me afectaria mucho?

Creo que ahora el codigo esta mas elegante y general...

Espero sugerencias...

MUCHAS GRACIAS A TODOS!!!




On 28 dic, 13:17, David Riveros <[email protected]> wrote:
> Es normal que pase eso, por que estás buscando información de una tabla que
> está alejada 2 niveles de tu modelo actual
> (Factura->DetalleFactura->Producto).
>
> Para solucionar el problema de los otros campos que no te salen, modifica la
> consulta, agregándole 'Cliente', al final, quedando así por:
>
> $this->set('factura', $this->Factura->find('first', array('conditions' =>
> array('Factura.id' => $id), 'contain' => array('DetalleFactura' =>
> array('Producto'),'Cliente'))));
>
> Que otros campos no se muestran? que otras relaciones tiene Factura?. Si te
> faltan mas modelos asociados, solo ponlos después de Cliente.
>
> Se puede optimizar la consulta solo trayendo los campos que utilizas en tu
> vista, pero creo que este ya es un primer paso, te confundirás más si trato
> de meterte los fields por ahi, pero quedaría algo como esto:
>
> $this->set('factura', $this->Factura->find('first', array('conditions' =>
> array('Factura.id' => $id), 'contain' => array('DetalleFactura' =>
> array('Producto' => array('fields' => array('Producto.producto'))),'Cliente'
> => array('fields' => array('Cliente.nombre'))))));
>
> Te recomiendo leas sobre containable behavior, que sirve para este tipo de
> consultas.http://book.cakephp.org/view/1323/Containable
>
> --
>
> David Riveros Fonseca | Desarrollador Web | ANDAIN - Desarrollo y diseño Web
> [email protected]  |http://www.andain.cl/
>
> 2010/12/28 checho <[email protected]>
>
> > SOLUCIONADOOOOOO!!!
>
> > (pero me dejo de andar otra cosa! ajjajaj)
>
> > Ya me aparece el nombre del producto en el detalle de la factura en
> > lugar del id...!!!
>
> > pero ahora los campos que traia en Factura (que tambien provenian de
> > otra tabla) no me funcionan...
>
> > Por ejemplo:
>
> > La factura tiene un campo cliente_id, que me traia correctamente
> > mostrandome el nombre del cliente en lugar del id
> > pero ahora ya no funciona, en su lugar sale
>
> > Notice (8): Undefined index: Cliente [APP\views\facturas\view.ctp,
> > line 41]
>
> > y asi con un par de campos mas propios de Factura en donde podia traer
> > correctamente el campo de otra tabla porque estaba directamente
> > relacionada.
>
> > Sospecho que debe ser por el cambio de la linea:
>
> > $this->set('factura', $this->Factura->read(null, $id));
>
> > La sugerencia de la modificacion del app_model.php aparentemente
> > tambien era vital. Pero todos los desarrolladores tienen que hacer eso
> > por ejemplo para hacer algo tan comun como Factura-detalle???
>
> > Este problema debe estar seguramente mas que solucionado por todos. Es
> > normal lo que tuve que pasar yo? o es que tengo mal los diseños???
>
> > On 28 dic, 12:20, David Riveros <[email protected]> wrote:
> > > Primero que todo, en tu app_model.php, coloca esto:
>
> > > class AppModel extends Model{
> > > var $actsAs = array('Containable');
>
> > > }
>
> > > Para que todos tus modelos funcionen con el behavior Containable.
>
> > > En el controlador, en tu función view, en vez de
>
> > > $this->set('factura', $this->Factura->read(null, $id));
>
> > > cambialo por:
>
> > > $this->set('factura', $this->Factura->find('first', array('conditions' =>
> > > array('Factura.id' => $id), 'contain' => array('DetalleFactura' =>
> > > array('Producto')))));
>
> > > Con estos cambios ahora lo que tenias como
> > > <td><?php echo $detallefactura['producto_id'];?></td>
>
> > > lo cambias por
> > > <td><?php echo $detallefactura['Producto']['producto'];?></td>
>
> > > Prueba y nos cuentas.
>
> > > Saludos.
>
> > > --
>
> > > David Riveros Fonseca | Desarrollador Web | ANDAIN - Desarrollo y diseño
> > Web
> > > [email protected]  |http://www.andain.cl/
>
> > > 2010/12/28 jose javier lara torres <[email protected]>
>
> > > > Probaste con el recursive a 1, si están bien relacionados en el modelo,
> > > > debe de aparecer.
>
> > > > El 28 de diciembre de 2010 15:47, checho <[email protected]
> > >escribió:
>
> > > > $detallefactura me trae el arreglo correctamente pero con los campos
> > > >> propios de detalle factura
>
> > > >> Array
> > > >> (
> > > >>    [id] => 1
> > > >>    [factura_id] => 1
> > > >>    [producto_id] => 1
> > > >>    [cant] => 1
> > > >> )
> > > >> Array
> > > >> (
> > > >>    [id] => 2
> > > >>    [factura_id] => 1
> > > >>    [producto_id] => 2
> > > >>    [cant] => 4
> > > >> )
>
> > > >> El tema es que de ese array no estoy pudiendo traer el campo producto
> > > >> de la tabla productos. Porque es evidente que el array no lo tiene.
>
> > > >> El problema es que necesito un array en la vista factura que me traiga
> > > >> el campo producto de la tabla productos y pueda mostrarlo en lugar de
> > > >> mostrar el producto_id
>
> > > >> Espero su respuesta.
>
> > > >> Muchas gracias a todos por su inmediata colaboracion.
>
> > > >> Saludos.-
>
> > > >> On 28 dic, 11:20, Alvaro Enrique González González <[email protected]>
> > > >> wrote:
> > > >> > config/core.php -> Configure::write('debug', 2);
>
> > > >> > en tu vista facturas/view.ctp escribe lo siguiente:
> > > >> > pr($detallefactura);
>
> > > >> > Ahí ve el detalle de los datos que te envía el controlador.
>
> > > >> > Saludos
>
> > > >> > Alvaro González G.
> > > >> > Desarrollador Web
>
> > > >> > Andain | Desarrollo y Diseño Web
> > > >> > T: 02 231 5486
>
> > > >> > -----Mensaje original-----
> > > >> > De: [email protected] [mailto:[email protected]]
> > En
> > > >> > nombre de checho
> > > >> > Enviado el: martes, 28 de diciembre de 2010 11:17
> > > >> > Para: CakePHP-es
> > > >> > Asunto: [CakePHP-es] Re: Problema con datos relacionados
>
> > > >> > Esta opcion tambien la probe poniendo lo de $producto en el
> > > >> > controlador de factura
>
> > > >> > y lo del view en la linea correspondiente...
>
> > > >> > tampoco me funciono.
>
> > > >> > no trae el campo producto desde la vista factura
>
> > > >> > On 28 dic, 07:00, jose javier lara torres
>
> > > >> > <[email protected]> wrote:
> > > >> > > Hola
>
> > > >> > > Tienes dos maneras de hacerlo, una es como te comenta Cristian,
> > para
> > > >> ello
> > > >> > > puedes hacer un debug de lo que te devuelve la query y asi podras
> > > >> > pintarlo,
> > > >> > > y la otra es haciendo una query tan sencilla como:
> > > >> > > Sí tienes el detalle de la factura, tienes el producto id, asi que
> > > >> puedes
> > > >> > > recuperar el producto haciendo lo siguiente:
>
> > > >> > > $producto =
>
> > $this->Producto->findById(detalleFactura['DetalleFactura']['producto_id'];
> > > >> > > $this->set('producto',$producto);
>
> > > >> > > View:
> > > >> > > echo $producto['Producto']['nombre'];
>
> > > >> > > Aún así la mejor opción es la de Cristian, ya que nos ahorramos
> > una
> > > >> query.
>
> > > >> > > Un saludo.
>
> > > >> > > El 28 de diciembre de 2010 02:30, Cristian Bernal
>
> > > >> > <[email protected]>escribió:
>
> > > >> > > > Creo que la menera de hacerlo según creo.
>
> > > >> > > > En tu vista:
>
> > > >> > > > Prueba <td><?php echo
> > > >> $detallefactura['Producto']['producto'];?></td>
>
> > > >> > > > Si no funciona sube la recursividad $this->Factura->recursive =
> > 1;
> > > >> en
> > > >> > > > tu controlador.
>
> > > >> > > > Un saludo y espero te sirva.
>
> > > >> > > > --
> > > >> > > > Has recibido este mensaje porque estás suscrito al grupo
> > > >> "CakePHP-es" de
> > > >> > > > Grupos de Google.
> > > >> > > > Para publicar una entrada en este grupo, envía un correo
> > electrónico
> > > >> a
> > > >> > > > [email protected].
> > > >> > > > Para anular tu suscripción a este grupo, envía un correo
> > electrónico
> > > >> a
>
> > > >> > [email protected]<cakephp-es%[email protected]>
> > <cakephp-es%[email protected]<cakephp-es%[email protected]>
>
> > > >> <cakephp-es%2bunsubscr...@googlegroup
> > > >> > s.com>
>
> > > >> > > > Para tener acceso a más opciones, visita el grupo en
> > > >> > > >http://groups.google.com/group/cakephp-es?hl=es.
>
> > > >> > > --
> > > >> > >  NunCa Nadiie hiizo tanTo daño en Tan poCo TiiempO
>
> > > >> > --
> > > >> > Has recibido este mensaje porque estás suscrito al grupo
> > "CakePHP-es" de
> > > >> > Grupos de Google.
> > > >> > Para publicar una entrada en este grupo, envía un correo electrónico
> > a
> > > >> > [email protected].
> > > >> > Para anular tu suscripción a este grupo, envía un correo electrónico
> > a
> > > >> > [email protected]<cakephp-es%[email protected]>
> > <cakephp-es%[email protected]<cakephp-es%[email protected]>
>
> > > >> > Para tener acceso a más opciones, visita el grupo enhttp://
> > > >> groups.google.com/group/cakephp-es?hl=es.
>
> > > >> --
> > > >> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es"
> > de
> > > >> Grupos de Google.
> > > >> Para publicar una entrada en este grupo, envía un correo electrónico a
> > > >> [email protected].
> > > >> Para anular tu suscripción a este grupo, envía un correo electrónico a
> > > >> [email protected]<cakephp-es%[email protected]>
> > <cakephp-es%[email protected]<cakephp-es%[email protected]>
>
> > > >> Para tener acceso a más opciones, visita el grupo en
> > > >>http://groups.google.com/group/cakephp-es?hl=es.
>
> > > > --
> > > >  NunCa Nadiie hiizo tanTo daño en Tan poCo TiiempO
>
> > > > --
> > > > Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es"
> > de
> > > > Grupos de Google.
> > > > Para publicar una entrada en este grupo, envía un correo electrónico a
> > > > [email protected].
> > > > Para anular tu suscripción a este grupo, envía un correo electrónico a
> > > > [email protected]<cakephp-es%[email protected]>
> > <cakephp-es%[email protected]<cakephp-es%[email protected]>
>
> > > > Para tener acceso a más opciones, visita el grupo en
> > > >http://groups.google.com/group/cakephp-es?hl=es.
>
> > --
> > Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de
> > Grupos de Google.
> > Para publicar una entrada en este grupo, envía un
>
> ...
>
> leer más »

-- 
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos 
de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a 
[email protected].
Para anular tu suscripción a este grupo, envía un correo electrónico a 
[email protected]
Para tener acceso a más opciones, visita el grupo en 
http://groups.google.com/group/cakephp-es?hl=es.

Responder a