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.
