Relacionando tabelas com Zend Framework -
Em qualquer projeto, temos que poder relacionar uma tabela com a outra. O Zend framework possui essa funcionalidade de uma forma nativa. Basta configurar o Model da forma correta.
Exemplo:
Tableas: users e usersprofile
CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `login` varchar(20) collate utf8_unicode_ci NOT NULL, `passwd` varchar(50) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `login` (`login`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ; INSERT INTO `users` (`id`, `login`, `passwd`) VALUES (1, 'nomedasilva', '123'); CREATE TABLE `usersprofile` ( `id` int(11) NOT NULL auto_increment, `user_id` int(11) NOT NULL, `nome` varchar(100) collate utf8_unicode_ci NOT NULL, `email` varchar(100) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ; INSERT INTO `usersprofile` (`id`, `user_id`, `nome`, `email`) VALUES (1, 1, 'Nome da silva', 'nomedasilva@schoolofnet.com');
Model: Users.php
'Users', 'refColumns' => 'id', 'columns' => 'user_id', 'onDelete'=> self::CASCADE, 'onUpdate'=> self::RESTRICT) ); }
Controller: IndexController.php
view->users = $users->fetchAll(); } }
View: index.phtml
Usuários: foreach($this->users as $user): ?> Login: =$user->login; ?> Nome: $perfil = $user->findDependentRowset('UsersProfile'); foreach ($perfil as $perfilOk): echo $perfilOk->nome; endforeach; ?>
Logo, podemos ver que na view utilizamos o comando: $user->findDependentRowset(‘UsersProfile’); ou seja, nesse caso ele automaticamente relaciona e acha a tabela dependente, no caso usersprofile e faz a relação. Neste exemplo só temos um registro, porém, isso pode e deve ser utilizado num relacionamento do tipo one-to-many.
cara gostei do artigo… alias de duas semanas pra cá, que comecei a estudar o zend, to a cada dia me surpreendendo… pensei que só a turma do java que escrevia boas linhas de código (p/ web)… mas to revendo meus conceitos… e não é somente com o zend que esta de parabéns, mas o pessoal da ext também desenvolve um bom trabalho… flw!
Comentário by dé — 29/07/2008 @ 0:09
dé (rs),
O PHP está evoluindo muito. Na realidade a cada nova versão mais “complexa” fica a linguagem no ponto de quem quiser programar ou desenvolver utilizando frameworks têm que necessariamente aprender OO (orientação a objetos), que na minha opinião é muito fácil, o grande ponto é que muitos aprenderam de outra forma e acabam se complicando:
Um bom exemplo para isso é o Windows vs Linux.
Quem começa aprendendo Linux antes do Windows acha linux muito fácil e muito bom, porém, se você começou pelo Windows é natual encontrar tal dificuldade com ambientes Linux.
Abraços
Wesley
Comentário by Wesley — 29/07/2008 @ 12:24
Muito boa explicação e exemplo!
Agora, e se eu quisesse exibir somente os userprofiles que tivessem um id > 10 (Ex: where id>10)
$user->findDependentRowset(’UsersProfile’);
Daria pra fazer algo como abaixo? $user->findDependentRowset(’UsersProfile’)->where(‘id >10′);
Abs
Comentário by LeoCaseiro — 13/02/2009 @ 9:18
Quando você usa esse método, você recebe o objeto inteiro na mão, logo, você pode usar todos os recursos da zend_db_table ou zend_db_select
Comentário by Wesley — 13/02/2009 @ 9:36
Wesley,
ali no foreach do perfil, ao invés de usar o foreach, não seria melhor acessar diretamente o nome?
pq no caso, só se precisa do nome do usuário e com o foreach todo o objeto do findDependentRowset seria percorrido, não?
abs
Comentário by Lucas Renan — 17/05/2009 @ 22:27
Wesley,
parabéns pelo post, mas aqui eu nao consegui cara…
quando executo me gera o seguinte erro:
Fatal error: Call to undefined method Zend_Db_Table_Rowset::findDependentRowset() in /var/www/siga/app/controllers/UserController.php on line 13
talvez seja por eu estar usando o ZF 1.8.4
poderia me ajudar?!!!
abs
Comentário by Giolvani — 09/07/2009 @ 11:58