Tendrás que ver el volumen de productos, facturas que tendrá tu aplicación.
Sino va a ser muy grande, tampoco afectara nada, pero si el volumen es
grande pues si.




El 29 de diciembre de 2010 15:51, checho <[email protected]> escribió:

> 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%[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]>
> >
> > > <cakephp-es%[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]>
> >
> > > <cakephp-es%[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]>
> >
> > > <cakephp-es%[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]<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]
Para tener acceso a más opciones, visita el grupo en 
http://groups.google.com/group/cakephp-es?hl=es.

Responder a