Zend Framework
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', '[email protected]');
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: 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.