Re: Loop + save() = Problema do mau
Caras eu realmente estou pra desistir... Advinha só eu fiz usando save() sem informar o ID e ele fez dois inserts e atualizou o resto _ Fiz também usando create() (como você citou) e tchan tchan tchan, MALDITO não fez nada, nem inseriu, nem atualizou muito menos removeu... Que porr@ :D Como diriam os americanos What a hell this is? Pessoal estou ficando louco com isso vou publicar meu controller fudido aqui juntamente com as tabelas e respectivos registros se alguma alma caridosa puder testar ai pra ver se funciona normalmente eu agradeço. CONTROLLER ?php class PerguntasController extends AppController { var $name = 'Questions'; var $helpers = array('Html', 'Form', 'Javascript', 'Layout', 'Format' ); var $uses = array( 'Question', 'Research' ); //var $components = array( 'Function' ); /** * This controller is responsable for enable and disable * questions of research clone. * * @package Questions * @access public * @param integer $courses_id * @param integer $action_id * @version 20071011 */ function admin_aplicar( $researches_id, $action_id ) { // Is Allowed? $this-checkSession(); // The title $this-set( 'title', Aplicar perguntas para enquete ); $prova = 0; if( empty( $researches_id ) ) { // Show the message error $this-Session-setFlash( 'Dados inválidos' ); // Redirect user $this-redirect( '/admin/perguntas/'. $researches_id ); }else{ // Retrieve the research question $researchQuestion = $this-Research-read( null, $researches_id ); // Format the values $dateTime = explode( , $researchQuestion['Research'] ['created'] ); $date = explode( -, $dateTime[0] ); $time = explode( :, $dateTime[1] ); // Search aplication to extra research $arrayConditions = array( 'Research.id != '. $researches_id .'', 'Research.endDate' = $researchQuestion['Research']['endDate']/*, 'YEAR(Research.created)' = $date[0], 'MONTH(Research.created)' = $date[1], 'DAY(Research.created)' = $date[2], 'HOUR(Research.created)' = $time[0]/*, 'MINUTE(Research.created)' = $time[1]*/ ); $arrayFields = array( ); $researchData = $this-Research-findAll( $arrayConditions, $arrayFields ); // Loop's research related foreach( $researchData as $research ) { // Search the questions related $arrayConditions = array( 'Question.researchs_id' = $researches_id ); $arrayFields = array( ); $questionData = $this-Question-findAll( $arrayConditions, $arrayFields ); foreach ( $questionData as $question ) { /**/ $this-Question-id = null; $this-Question-create( array( 'institutions_id' = $this- session_data( 'institutions_id' ), 'researchs_id' = $research['Research']['id'], 'question' = $question['Question'] ['question'], 'public' = '0' ) ); } } } } } ? TABELAS SQL CREATE TABLE `researches` ( `id` bigint(20) NOT NULL auto_increment, `courses_id` bigint(20) NOT NULL default '0', `disciplines_id` int(20) NOT NULL, `institutions_id` int(4) unsigned NOT NULL default '0', `title` text collate latin1_general_ci NOT NULL, `comments` text collate latin1_general_ci, `endDate` datetime default NULL, `created` datetime default NULL, `anonymous` tinyint(1) default '0', `obligatorReply` tinyint(1) default '0', `flag` int(1) default '1', `share` tinyint(1) default '0', PRIMARY KEY (`id`), KEY `researchs_FKIndex1` (`institutions_id`), KEY `researchs_FKIndex2` (`courses_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=83 ; -- -- Extraindo dados da tabela `researches` -- INSERT INTO `researches` (`id`, `courses_id`, `disciplines_id`, `institutions_id`, `title`, `comments`, `endDate`, `created`, `anonymous`, `obligatorReply`, `flag`, `share`) VALUES (1, 30, 63, 1, 'Marcos Emilio Correa Moura - 2º TMA/Mecânica de Motores', NULL, '2007-10-28 20:56:00', '2007-10-18 20:56:42', 0, 0, 1, 0),
Re: Loop + save() = Problema do mau
Tenta trocar o exit por break =) On 10/19/07, hostdesigner [EMAIL PROTECTED] wrote: Bom, a quem se interessar (se é que alguém está lendo isso...) Eu estava fazendo uns testes baseados em POGramação avançada (poe gambiarra nisso), e percebi que o loop do foreach esta realmente rodando duas vezes, ainda não descobri por que, mas... $researchNum = $this-Research-getNumRows(); $questionNum = count( $questionData ); $prova=0; foreach ( $questionData as $question ) { $this-Question-id = null; $this-Question-save( array( 'institutions_id' = $this- session_data( 'institutions_id' ), 'researchs_id' = $research['Research']['id'], 'question' = $question['Question'] ['question'], 'public' = '0' ) ); if( $iterator == ( $researchNum * $questionNum ) ) { exit; } } Fazendo isso quando ele alcança o número máximo de registros que devem ser inseridos (no caso 115) ele para. Da forma como está ai em cima funciona perfeitamente a não ser pelo fato de que o exit para o processamento de qualquer código abaixo dele... sendo assim, o cake não retorna mais nada nem layout nem HTML :( E agora alguém me dá uma luz... Falopa! -- Rafael Barbosa Analista de Sistemas Web Gradua Networks --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
Já tentei break, exit, die inclusive return (nem faz sentido, mas, tentei...) O problema é que não funciona mesmo dependendo da quantidade de registros retornados pela consulta de $this-Question- findAll() os calculos ficam errados... No final das contas quando não falta um registro adiciona 1 ou 5 a mais. O problema é que se eu fizer como está lá em cima eu tenho $researchNum = 23 e $questionNum = 5, o calculo dá 115, mas, se eu tiver que fazer o sistema descobrir sozinho onde é que ele deve parar o loop dá problema, já que está inserindo o dobro eu tenho que dividir o resultado da multiplicação por 2 (115/2=57,5) e se arredondar vai ter um registro a mais... Alguma outra sugestão? Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
Bom, a quem se interessar (se é que alguém está lendo isso...) Eu estava fazendo uns testes baseados em POGramação avançada (poe gambiarra nisso), e percebi que o loop do foreach esta realmente rodando duas vezes, ainda não descobri por que, mas... $researchNum = $this-Research-getNumRows(); $questionNum = count( $questionData ); $prova=0; foreach ( $questionData as $question ) { $this-Question-id = null; $this-Question-save( array( 'institutions_id' = $this- session_data( 'institutions_id' ), 'researchs_id' = $research['Research']['id'], 'question' = $question['Question'] ['question'], 'public' = '0' ) ); if( $iterator == ( $researchNum * $questionNum ) ) { exit; } } Fazendo isso quando ele alcança o número máximo de registros que devem ser inseridos (no caso 115) ele para. Da forma como está ai em cima funciona perfeitamente a não ser pelo fato de que o exit para o processamento de qualquer código abaixo dele... sendo assim, o cake não retorna mais nada nem layout nem HTML :( E agora alguém me dá uma luz... Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
Esqueci para executar o método é só acessar http://aplicacao/admin/perguntas/aplicar/1/1 vai executar o mesmo que eu estou fazendo aqui na minha máquina. Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
Designer, eu não entendi direito mas se vc precisa pegar um registro do banco e grava-lo novamente com id diferente vc pode fazer isso facilmente, mas não da forma q vc citou. ERRADO $this-MODEL-save( array( 'campo' = 'valores' ) ); $this-MODEL-create(); O certo seria você pegar o registro, retirar o id e usar somente o save ou soente o create. Utilizando os 2 você vai fazer 2 requisições ao banco. utilize o save sem ter o ID $this-MODEL-save( array( 'campo' = 'valores' ) ); ou utilize o create passando os dados $this-MODEL-create( array( 'campo' = 'valores' ) ); pois como vc pode ver o create recebe o $data. http://api.cakephp.org/1.2/class_model.html#ffd04e1cae18cb61d1e219f5283eab35 espero ter ajudado On Oct 18, 9:02 pm, hostdesigner [EMAIL PROTECTED] wrote: O retorno do questionData é isso 5 indices, mas, quando eu executo o save ele cria 2 registros para cada indice _ Array ( [0] = Array ( [Question] = Array ( [id] = 1 [institutions_id] = 1 [researchs_id] = 1 [question] = Pergunta 1 [public] = 0 [created] = 2007-10-18 20:56:59 ) [Institution] = Array ( [id] = 1 [nameInstitution] = Faculdades Unicen [address] = Virgílio Favetti [city] = Tangará da Serra [estate] = MT [prefix] = UNI [mail] = [EMAIL PROTECTED] [created] = 2007-08-25 11:30:50 [modified] = 2007-08-25 11:31:03 [flag] = 1 ) [Research] = Array ( [id] = 1 [courses_id] = 30 [disciplines_id] = 63 [institutions_id] = 1 [title] = Marcos Emilio Correa Moura - 2º TMA/ Mecânica de Motores [comments] = [endDate] = 2007-10-28 20:56:00 [created] = 2007-10-18 20:56:42 [anonymous] = 0 [obligatorReply] = 0 [flag] = 1 [share] = 0 ) ) [1] = Array ( [Question] = Array ( [id] = 2 [institutions_id] = 1 [researchs_id] = 1 [question] = Pergunta 2 [public] = 0 [created] = 2007-10-18 20:57:06 ) [Institution] = Array ( [id] = 1 [nameInstitution] = Faculdades Unicen [address] = Virgílio Favetti [city] = Tangará da Serra [estate] = MT [prefix] = UNI [mail] = [EMAIL PROTECTED] [created] = 2007-08-25 11:30:50 [modified] = 2007-08-25 11:31:03 [flag] = 1 ) [Research] = Array ( [id] = 1 [courses_id] = 30 [disciplines_id] = 63 [institutions_id] = 1 [title] = Marcos Emilio Correa Moura - 2º TMA/ Mecânica de Motores [comments] = [endDate] = 2007-10-28 20:56:00 [created] = 2007-10-18 20:56:42 [anonymous] = 0 [obligatorReply] = 0 [flag] = 1 [share] = 0 ) ) [2] = Array ( [Question] = Array ( [id] = 3 [institutions_id] = 1 [researchs_id] = 1 [question] = Pergunta 3 [public] = 0 [created] = 2007-10-18 20:57:13 ) [Institution] = Array ( [id] = 1 [nameInstitution] = Faculdades Unicen [address] = Virgílio Favetti [city] = Tangará da Serra [estate] = MT [prefix] = UNI [mail] = [EMAIL PROTECTED] [created] = 2007-08-25 11:30:50 [modified] = 2007-08-25 11:31:03 [flag] = 1 ) [Research] = Array ( [id] = 1 [courses_id] = 30 [disciplines_id] = 63 [institutions_id] = 1 [title] = Marcos Emilio Correa Moura - 2º TMA/
Re: Loop + save() = Problema do mau
Opa, eu já estava pensando em escrever sobre isso, então acabei escrevendo... rs Aí vai: http://www.tuliofaria.net/dica-salvando-varios-registros-de-um-mesmo-model-de-uma-so-vez-dentro-de-um-loop/ Abraços, On 17 Out, 22:09, hostdesigner [EMAIL PROTECTED] wrote: Preciso resgatar alguns registros e adiciona-los na mesma tabela, mas, com o ID diferente, ou seja, estou duplicando o registro. Para tal fiz uma consulta que me retorna 23 registros logo abaixo fiz um foreach para percorrer os registros retornados e já inseri-los novamente usando save(), só que quando eu executo o código usando $this-MODEL-save( array( 'campo' = 'valores' ) ); O cake tenta atualizar os registros, não é isso que quero... E quando tento assim $this-MODEL-save( array( 'campo' = 'valores' ) ); $this-MODEL-create(); O cake cria 2000 e lá vai registros, o mais extranho é que quando eu coloco um array para simular uma inserção ele retorna certo, só não consegue adicionar. Vai a cópia do meu método, Alguém faz idéia de como solucionar isso? function admin_aplicar( $researches_id, $action_id ) { // Is Allowed? $this-checkSession(); // The title $this-set( 'title', Aplicar perguntas para enquete ); $prova = 0; if( empty( $researches_id ) ) { // Show the message error $this-Session-setFlash( 'Dados inválidos' ); // Redirect user $this-redirect( '/admin/perguntas/'. $researches_id ); }else{ // Retrieve the research question $researchQuestion = $this-Research-read( null, $researches_id ); // Format the values $dateTime = explode( , $researchQuestion['Research'] ['created'] ); $date = explode( -, $dateTime[0] ); $time = explode( :, $dateTime[1] ); // Search aplication to extra research $arrayConditions = array( 'Research.id != '. $researches_id .'', 'Research.endDate' = $researchQuestion['Research']['endDate']/*, 'YEAR(Research.created)' = $date[0], 'MONTH(Research.created)' = $date[1], 'DAY(Research.created)' = $date[2], 'HOUR(Research.created)' = $time[0]/*, 'MINUTE(Research.created)' = $time[1]*/ ); $arrayFields = array( ); $researchData = $this-Research-findAll( $arrayConditions, $arrayFields ); // Loop's research related foreach( $researchData as $research ) { // Search the questions related $arrayConditions = array( ); $arrayFields = array( ); $questionData = $this-Question-findAll( $arrayConditions, $arrayFields ); foreach ( $questionData as $question ) { $this-Question-save( array( 'institutions_id' = $this-session_data( 'institutions_id' ), 'researchs_id' = $question['Question']['researchs_id'], 'question' = $question['Question']['question'] ) ); $this-Question-create(); /**/ $treta[] = array( 'institutions_id' = $this-session_data( 'institutions_id' ), 'researchs_id' = $question['Question']['researchs_id'], 'question' = $question['Question']['question'] ); } } } $this-set( 'teste', $treta ); } Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
Alias, num é tão do mal assim :) On 17 Out, 22:09, hostdesigner [EMAIL PROTECTED] wrote: Preciso resgatar alguns registros e adiciona-los na mesma tabela, mas, com o ID diferente, ou seja, estou duplicando o registro. Para tal fiz uma consulta que me retorna 23 registros logo abaixo fiz um foreach para percorrer os registros retornados e já inseri-los novamente usando save(), só que quando eu executo o código usando $this-MODEL-save( array( 'campo' = 'valores' ) ); O cake tenta atualizar os registros, não é isso que quero... E quando tento assim $this-MODEL-save( array( 'campo' = 'valores' ) ); $this-MODEL-create(); O cake cria 2000 e lá vai registros, o mais extranho é que quando eu coloco um array para simular uma inserção ele retorna certo, só não consegue adicionar. Vai a cópia do meu método, Alguém faz idéia de como solucionar isso? function admin_aplicar( $researches_id, $action_id ) { // Is Allowed? $this-checkSession(); // The title $this-set( 'title', Aplicar perguntas para enquete ); $prova = 0; if( empty( $researches_id ) ) { // Show the message error $this-Session-setFlash( 'Dados inválidos' ); // Redirect user $this-redirect( '/admin/perguntas/'. $researches_id ); }else{ // Retrieve the research question $researchQuestion = $this-Research-read( null, $researches_id ); // Format the values $dateTime = explode( , $researchQuestion['Research'] ['created'] ); $date = explode( -, $dateTime[0] ); $time = explode( :, $dateTime[1] ); // Search aplication to extra research $arrayConditions = array( 'Research.id != '. $researches_id .'', 'Research.endDate' = $researchQuestion['Research']['endDate']/*, 'YEAR(Research.created)' = $date[0], 'MONTH(Research.created)' = $date[1], 'DAY(Research.created)' = $date[2], 'HOUR(Research.created)' = $time[0]/*, 'MINUTE(Research.created)' = $time[1]*/ ); $arrayFields = array( ); $researchData = $this-Research-findAll( $arrayConditions, $arrayFields ); // Loop's research related foreach( $researchData as $research ) { // Search the questions related $arrayConditions = array( ); $arrayFields = array( ); $questionData = $this-Question-findAll( $arrayConditions, $arrayFields ); foreach ( $questionData as $question ) { $this-Question-save( array( 'institutions_id' = $this-session_data( 'institutions_id' ), 'researchs_id' = $question['Question']['researchs_id'], 'question' = $question['Question']['question'] ) ); $this-Question-create(); /**/ $treta[] = array( 'institutions_id' = $this-session_data( 'institutions_id' ), 'researchs_id' = $question['Question']['researchs_id'], 'question' = $question['Question']['question'] ); } } } $this-set( 'teste', $treta ); } Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
@ TULIO FARIA Esqueci de mencionar, o meu problema não era o citado no artigo (Adicionar um registro e os outros são atualizados) o meu caso é que o cake está salvando registros a mais, o dobro do solicitado. Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Re: Loop + save() = Problema do mau
Dá um pr($questionData) e manda o resultado pra cá falopa ;) On 18 out, 15:58, hostdesigner [EMAIL PROTECTED] wrote: @ TULIO FARIA Esqueci de mencionar, o meu problema não era o citado no artigo (Adicionar um registro e os outros são atualizados) o meu caso é que o cake está salvando registros a mais, o dobro do solicitado. Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---
Loop + save() = Problema do mau
Preciso resgatar alguns registros e adiciona-los na mesma tabela, mas, com o ID diferente, ou seja, estou duplicando o registro. Para tal fiz uma consulta que me retorna 23 registros logo abaixo fiz um foreach para percorrer os registros retornados e já inseri-los novamente usando save(), só que quando eu executo o código usando $this-MODEL-save( array( 'campo' = 'valores' ) ); O cake tenta atualizar os registros, não é isso que quero... E quando tento assim $this-MODEL-save( array( 'campo' = 'valores' ) ); $this-MODEL-create(); O cake cria 2000 e lá vai registros, o mais extranho é que quando eu coloco um array para simular uma inserção ele retorna certo, só não consegue adicionar. Vai a cópia do meu método, Alguém faz idéia de como solucionar isso? function admin_aplicar( $researches_id, $action_id ) { // Is Allowed? $this-checkSession(); // The title $this-set( 'title', Aplicar perguntas para enquete ); $prova = 0; if( empty( $researches_id ) ) { // Show the message error $this-Session-setFlash( 'Dados inválidos' ); // Redirect user $this-redirect( '/admin/perguntas/'. $researches_id ); }else{ // Retrieve the research question $researchQuestion = $this-Research-read( null, $researches_id ); // Format the values $dateTime = explode( , $researchQuestion['Research'] ['created'] ); $date = explode( -, $dateTime[0] ); $time = explode( :, $dateTime[1] ); // Search aplication to extra research $arrayConditions = array( 'Research.id != '. $researches_id .'', 'Research.endDate' = $researchQuestion['Research']['endDate']/*, 'YEAR(Research.created)' = $date[0], 'MONTH(Research.created)' = $date[1], 'DAY(Research.created)' = $date[2], 'HOUR(Research.created)' = $time[0]/*, 'MINUTE(Research.created)' = $time[1]*/ ); $arrayFields = array( ); $researchData = $this-Research-findAll( $arrayConditions, $arrayFields ); // Loop's research related foreach( $researchData as $research ) { // Search the questions related $arrayConditions = array( ); $arrayFields = array( ); $questionData = $this-Question-findAll( $arrayConditions, $arrayFields ); foreach ( $questionData as $question ) { $this-Question-save( array( 'institutions_id' = $this- session_data( 'institutions_id' ), 'researchs_id' = $question['Question']['researchs_id'], 'question' = $question['Question']['question'] ) ); $this-Question-create(); /**/ $treta[] = array( 'institutions_id' = $this- session_data( 'institutions_id' ), 'researchs_id' = $question['Question']['researchs_id'], 'question' = $question['Question']['question'] ); } } } $this-set( 'teste', $treta ); } Falopa! --~--~-~--~~~---~--~~ Recebeu esta mensagem porque está inscrito em Grupo Cake PHP Português do Grupos Google. Para enviar mensagens para este grupo, envie um email para cake-php-pt@googlegroups.com Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED] Para mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-PT -~--~~~~--~~--~--~---