Zend Framework

Relacionando tabelas com Zend Framework

Por em

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.