Estas en lo correcto, lo que tienes de dominar es la construccion del arreglo y ciclos para que puedas realizar correctamente la insercion.
Normalmente yo construyo una vista sencilla con todos los campos que debo tener para cuando realice $this->save lo haga correctamente. De esta manera verifico la consistencia y que las relaciones funcionan en cake. Luego genero ese arreglo, como lo necesita cake, luego procedo a salvar y me funciona. Cuando no uso vistas procedo a enviarlo por parametros y ejecuto el $this->query a mi conveniencia y lo hace correctamente tambien, a excepcion cuando lo tengo dentro de un for, que estoy buscando la manera de resolverlo. Espero haberte ayudado. Saludos. El 16 de marzo de 2011 07:44, mayuli plaza gonzalez < [email protected]> escribió: > > hola amigo, gracias por responderme... > ya hice el paso 1 y 2 pero cuando hago en insert en cada modelo no se > inserta... > ejemplo: > desde el archivo excel yo leo toda la informacion pero dicha informacion va > almacenada en distintos modelo o tablas de mi base de datos > de verdad no se cómo extraer esa informacion que ya tengo, porq creo que el > rollo es de trabajar con array y ciclos... > por ejemplo que recorra el modelo de Norma y lo inserte (luego siga > recorriendo y encuentre el dominio y lo inserte *ASociado* a esa Norma, y > luego recorra a Objetivos y lo inserte *asociado* a Dominio) y asi > sucesivamente con lo demas. > > Lo único que he logrado hacer es Insertar Norma Perfectamente pero los > demas registros asociados no se insertan... > No se si me explico.... > > > > ------------------------------ > Date: Tue, 15 Mar 2011 19:49:16 -0430 > Subject: Re: [CakePHP-es] Leer Archivo de Excel e insertar su contenido > From: [email protected] > To: [email protected] > > > Hola, > > Trato de ayudarte, me considero novato en algunas cosas, no he realizado > especificamente lo que indicas, pero he realizado algo parecido, yo hago lo > siguiente: > > Primer Paso: Proceso lo que necesite dentro de mi controlador, en tu caso > la lectura del archivo excel y construyo el arreglo. > > Segundo Paso: En el controlador agrego al resultado del Primer paso lo que > me haga falta con la logica que yo necesite, en tu caso aqui agregaria el > norma_id. Si ya tienes experiencia lo puedes hacer en el paso 1, es > indistinto, lo que importa es que generes el arreglo que necesitas para que > cake lo pueda insertar. Esto lo debes de pasar a la vista del formulario > haciendo uso del $this->set para que puedas hacer el $this->data de cake. > > Si son muchos registros y no vas a usar vistas puedes llamar a un for que > te inserte los registros invocando a un insert que contruyas en tu modelo, > esto funciona pero actualmente tengo problemas con el $this->query(insert > into) porque me graba registros duplicados en la base de datos aunque lo > llame una vez, estoy tratando de ver como puedo insertar a traves de cake y > no usando el $this->query > > SAludos, > Reinaldo > > El 15 de marzo de 2011 11:24, mayuli plaza gonzalez < > [email protected]> escribió: > > Hola Comunidad, estoy leyendo de un archivo excel el contenido que debe ser > insertado en una base de datos, Sin embargo tengo un pequeño problema con > > la clave foránea de los modelos. y no se insertan en las tablas.... > > por ejemplo el Dominio está asociado a Norma ¿pero cómo le asigno el idNormas > al modelo Dominio automáticamente si no es leído desde el archivo de excel ? > > > hice un for que recorre el archivo de excel de esta manera: > > for ($i = 0; $i < 2; $i++) { > for( $j = 0; $j < 2; $j++) { > > $product[$root_headers[0]][$norma_headers[$j]] > = $data->sheets[0]['cells'][$i + 1][$j + 1]; > > for ($k = 0; $k < 4; $k++) { > for( $l = 0; $l < 3; $l++) { > > $product[$rootDominio_headers[0]][$dominio_headers[0]] = > $data->sheets[0]['cells'][$k + 1][$l + 1]; > > for ($m = 0; $m < 6; $m++) { > for( $n = 0; $n < 4; > $n++){ > > $product[$rootObjGral_headers[0]][$objGral_headers[0]] = > $data->sheets[0]['cells'][$m + 1][$n + 1]; > > for ($o = 0; $o > < 8; $o++) { > for( $p > = 0; $p < 5; $p++){ > > $product[$rootObjEsp_headers[0]][$objEsp_headers[0]] = > $data->sheets[0]['cells'][$o + 1][$p + 1]; > > } > } > > > } > } > } > > } > } > > } > pr($product); exit(); > return $product; > > y al imprimir la variable $product me imprime lo siguiente: > > Array > > ( [Norma] => Array > ( > [nombrenormas] => Los Mandamientos > [detallesnormas] => Leyes Religiosas > ) > > [Dominio] => Array > ( > [nombredominios] => 1.-Amar a Dios sobre todas las Cosas. > ) > > [Objetivogeneral] => Array > ( > [nombreObjetivo] => 1.1-Ama a tu prójimo como a ti mismo > ) > > [Objetivoespecifico] => Array > ( > [nombreObjetivoE] => 1.1.1 Con toda la mente y con todo el corazón > ) > > ) > > > pero no deberia estar asi, sino que en cada modelo le debo asignar su > respectiva asociación. Por ejemplo digo yo que sería así: > > Array > > ( [Norma] => Array > ( > [nombrenormas] => Los Mandamientos > [detallesnormas] => Leyes Religiosas > ) > > [Dominio] => Array > ( > [nombredominio] => 1. - Amar a Dios Sobre todas las cosas > > [*Norma_id*] => 02 > > ) > > > [Objetivogeneral] => Array > ( > [nombreObjetivo] => 1.1-Ama a tu prójimo como a ti mismo > > [*Dominio_id*] => 04 > > > ) > > [Objetivoespecifico] => Array > ( > [nombreObjetivoE] => 1.1.1 Con toda la mente y con todo el corazón > > [*ObjetivoGeneral_id*] => 06 > > > ) > > *pero no se cómo ni donde hacerlo.... en el ciclo for de la clase > MY_READER_excel? o en el Controlador al Cargar el Archivo?.... * > *Bueno, no se si me puedan ORIENTAR.... gracias...* > > > > > -- > 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. > > > > -- > 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. > > -- > 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. > -- 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.
