JCCA 0 Denunciar post Postado Agosto 4, 2010 Pessoal tenho as seguintes tabelas relacionadas; CREATE TABLE `horarios` ( `id` smallint(6) NOT NULL, `modulo_id` smallint(6) NOT NULL, `turma` varchar(10) DEFAULT NULL, `periodo` varchar(30) DEFAULT NULL, `dia_semana` varchar(70) DEFAULT NULL, `horario` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`), KEY `horario_modulo` (`modulo_id`), CONSTRAINT `horario_modulo` FOREIGN KEY (`modulo_id`) REFERENCES `modulos` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 CREATE TABLE `modulos` ( `id` smallint(6) NOT NULL, `identificador` varchar(20) NOT NULL, `descricao` varchar(60) NOT NULL, `tipo` char(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 Segue abaixo seus modelos: <?php class Horario { var $name = 'Horario'; var $belongsTo = array('Modulo'); } ?> <?php class Modulo extends AppModel{ var $name = 'Modulo'; var $hasMany = array('Horario') ; } ?> Quando tento recuperar os dados através do código: function index() { $this->set('modulos', $this->Modulos->find("all")); } E executando o comando: <?php print_r($modulos)?> Ele me retorna o seguinte resultado, não exibindo os dados de horário, só os módulos: Array ( [0] => Array ( [Modulos] => Array ( [id] => 1 [identificador] => bb [descricao] => Funcionamento do bb [tipo] => g ) ) [1] => Array ( [Modulos] => Array ( [id] => 3 [identificador] => teste [descricao] => Teste 01 [tipo] => p ) ) ) Qual será o problema? Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Agosto 4, 2010 Problema parecido que também estou tentando solucionar está em: http://forum.imasters.com.br/index.php?/topic/404261-excluir-dados-de-tabelas-ligadas/page__gopid__1585287entry1585287 Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 4, 2010 Tenta mudar o tipo de relacionamento. Geralmente só é preciso ter o relacionamento em um dos Models. Não sei pq isso acontece, pela lógica o teu estaria correto, mas tenta mudar, tenho certeza que vai funcionar. Compartilhar este post Link para o post Compartilhar em outros sites
JCCA 0 Denunciar post Postado Agosto 4, 2010 Tenta mudar o tipo de relacionamento. Geralmente só é preciso ter o relacionamento em um dos Models. Não sei pq isso acontece, pela lógica o teu estaria correto, mas tenta mudar, tenho certeza que vai funcionar. Cara! Fiz uns testes neste sentido e não funcionou! você teria algum exemplo aí funcionando pra eu testar? Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 4, 2010 Já sei onde está seu erro.. No Model horário, você deve estender a AppModel.. class Horario extends AppModel { //codigo } Mas por via de dúvidas... Vou colocar aqui oq eu fiz com Estado - Cidades, que é parecido. Model Cidade: class Cidade extends AppModel { var $name = 'Cidade'; var $belongsTo = 'Estado'; } OBS: ao invez de usar print_r, use pr(), é melhor. A principio está parecido com o seu códio, estou usando os mesmos relacionamentos.. não consigo visualizar direito teu array, está tudo na mesma linha... Model Estado: class Estado extends AppModel { var $name = 'Estado'; var $hasMany = 'Cidade'; Estados Controller: function read() { pr($this->Estado->find('all')); $this->set('estados', $this->Estado->find('all')); } Array: Array ( [0] => Array ( [Estado] => Array ( [id] => 1 [estado] => Rio Grande do Sul [uf] => RS ) [Cidade] => Array ( [0] => Array ( [id] => 22 [estado_id] => 1 [cidade] => Não-Me-Toque ) [1] => Array ( [id] => 23 [estado_id] => 1 [cidade] => Passo Fundo ) [2] => Array ( [id] => 24 [estado_id] => 1 [cidade] => Carazinho ) [3] => Array ( [id] => 25 [estado_id] => 1 [cidade] => Victor Graeff ) [4] => Array ( [id] => 26 [estado_id] => 1 [cidade] => Soledade ) ) ) [1] => Array ( [Estado] => Array ( [id] => 2 [estado] => Santa Catarina [uf] => SC ) [Cidade] => Array ( ) ) [2] => Array ( [Estado] => Array ( [id] => 3 [estado] => São Paulo [uf] => SP ) [Cidade] => Array ( ) ) [3] => Array ( [Estado] => Array ( [id] => 4 [estado] => Goiás [uf] => GO ) [Cidade] => Array ( [0] => Array ( [id] => 31 [estado_id] => 4 [cidade] => Goiânia ) ) ) ) Compartilhar este post Link para o post Compartilhar em outros sites
JCCA 0 Denunciar post Postado Agosto 4, 2010 É!! Realmente tinha tinha esquecido do extends, corrigi mas, continua dando este resultado: Array ( [0] => Array ( [Modulos] => Array ( [id] => 1 [identificador] => bb [descricao] => Funcionamento [tipo] => g ) ) [1] => Array ( [Modulos] => Array ( [id] => 3 [identificador] => gg [descricao] => gastos [tipo] => p ) ) ) Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 4, 2010 Você está trazendo os dados em qual controller? Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Agosto 4, 2010 Vejo que você está chamando o model deste modo: $this->set('modulos', $this->Modulos->find("all"));(preste atenção no negrito)Tente: $this->set('modulos', $this->Modulo->find("all"));E se não der: $this->set('modulos', $this->Modulo[b]s[/b]->find("all", array('recursive' => 2))); Compartilhar este post Link para o post Compartilhar em outros sites
JCCA 0 Denunciar post Postado Agosto 4, 2010 Você está trazendo os dados em qual controller? <?php class ModulosController extends AppController{ var $name = "Modulos"; var $uses = array("Modulos", "Horarios"); function index() { $this->set('modulos', $this->Modulos->find("all")); } } ?> Vejo que você está chamando o model deste modo: $this->set('modulos', $this->Modulos->find("all"));(preste atenção no negrito)Tente: $this->set('modulos', $this->Modulo->find("all"));E se não der: $this->set('modulos', $this->Modulo[b]s[/b]->find("all", array('recursive' => 2))); Valeu! tentei estas opções mas, deu o mesmo resultado!?!?! Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 5, 2010 Cara, mão tem mais muito o que mudar, pode ser que você setou a variavel $recursive no teu model como 0 e não esteja buscando os dados da outra tabela.. seta pra 2 ou 3 e ve o que acontece.. Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Agosto 5, 2010 Você também está usando o Controller::$uses erroneamente, provavelmente será isso. Troque disso: var $uses = array("Modulos", "Horarios");Para var $uses = array("Modulo", "Horario"); E não se esqueça de utilizar $this->Modulo e não $this->Modulos Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 5, 2010 Você também está usando o Controller::$uses erroneamente, provavelmente será isso. Troque disso: var $uses = array("Modulos", "Horarios");Para var $uses = array("Modulo", "Horario"); E não se esqueça de utilizar $this->Modulo e não $this->Modulos Ah, bem visto lucaswxp. Provavelmente esteja aí a resolução. Compartilhar este post Link para o post Compartilhar em outros sites
JCCA 0 Denunciar post Postado Agosto 5, 2010 Valeu! Mas tb não!! Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 6, 2010 Cara, posta os códigos, posta os erros. Não temos como adivinhar o que está acontecendo.. Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Agosto 6, 2010 Sim, posta o código todo ATUALMENTE. (inclusive sql) Compartilhar este post Link para o post Compartilhar em outros sites
JCCA 0 Denunciar post Postado Agosto 6, 2010 Sim, posta o código todo ATUALMENTE. (inclusive sql) Segue: modulos_controller.php <?php class ModulosController extends AppController{ var $name = "Modulos"; var $uses = array("Modulo", "Horario"); function index() { $this->set('modulos', $this->Modulo->find("all",array('recursive' => 2))); } } ?> Horario.php <?php class Horario extends AppModel { var $name = 'Horario'; var $belongsTo = array('Modulo'); } ?> Modulo.php <?php class Modulo extends AppModel{ var $name = 'Modulo'; var $hasMany = array('Horario') ; } ?> Tabelas: CREATE TABLE `horarios` ( `id` smallint(6) NOT NULL, `modulo_id` smallint(6) NOT NULL, `turma` varchar(10) DEFAULT NULL, `periodo` varchar(30) DEFAULT NULL, `dia_semana` varchar(70) DEFAULT NULL, `horario` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`), KEY `horario_modulo` (`modulo_id`), CONSTRAINT `horario_modulo` FOREIGN KEY (`modulo_id`) REFERENCES `modulos` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 CREATE TABLE `modulos` ( `id` smallint(6) NOT NULL, `identificador` varchar(20) NOT NULL, `descricao` varchar(60) NOT NULL, `tipo` char(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 Resultado após chamada ao link: http://localhost/CakePHP2/modulos Array ( [0] => Array ( [Modulos] => Array ( [id] => 1 [identificador] => bb [descricao] => Funcionamento [tipo] => g ) ) [1] => Array ( [Modulos] => Array ( [id] => 3 [identificador] => gg [descricao] => gastos [tipo] => p ) ) ) Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 6, 2010 O nome do teu Model está com letra maiúscula? Se estiver, coloque minuscula.. horario.php, modulo.php Compartilhar este post Link para o post Compartilhar em outros sites
JCCA 0 Denunciar post Postado Agosto 6, 2010 O nome do teu Model está com letra maiúscula? Se estiver, coloque minuscula.. horario.php, modulo.php beleza!!! Agora foi!! Obrigado a todos!! Compartilhar este post Link para o post Compartilhar em outros sites