Neste tutorial vou demonstrar como utilizar a cláusula JOIN entre duas tabelas do MySql com Zend_Db_Select. Primeiro criei duas tabelas, uma de usuário e outra para a permissão.
CREATE TABLE IF NOT EXISTS `permissao` ( `PERMISSAO_ID` int(11) NOT NULL AUTO_INCREMENT, `USUARIO_ID` int(11) NOT NULL, `PERMISSAO_NOME` enum('admin','user','gest') NOT NULL, PRIMARY KEY (`PERMISSAO_ID`) ); CREATE TABLE IF NOT EXISTS `usuario` ( `USUARIO_ID` int(11) NOT NULL AUTO_INCREMENT, `USUARIO_NOME` varchar(55) NOT NULL, PRIMARY KEY (`USUARIO_ID`) );
Agora adiciono os dados nestas tabelas
INSERT INTO `permissao` (`PERMISSAO_ID`, `USUARIO_ID`, `PERMISSAO_NOME`) VALUES (1, 1, 'admin'), (2, 2, 'gest'); INSERT INTO `usuario` (`USUARIO_ID`, `USUARIO_NOME`) VALUES (1, 'Eduardo Kraus'), (2, 'Fulano da Silva');
Se fôssemos criar o SQL para unir estas duas tabelas, ficaria assim:
SELECT * FROM `usuario` JOIN `permissao` ON ( `usuario`.`USUARIO_ID` = `permissao`.`USUARIO_ID`)
Eu tenho aqui a tabela usuário que é a principal que tem a permissão como referencia. Agora vamos executa-la com o Zend_Db_Select
Arquivo post10025\index.php<?php require_once 'Config.php'; $db = Config::getDbInstance (); $stmt = $db->select (); $stmt->from ( 'usuario' ); $stmt->join ( 'permissao', '`usuario`.`USUARIO_ID` = `permissao`.`USUARIO_ID`' ); $result = $db->fetchAll ( $stmt ); print_r ( $result );
Vamos a explicação.
Após importado o Config e carregado a instância de conexão, criamos uma instancia do Zend_Db_Select com a chamada $db->select (). Nesta instância chamamos a tabela principal com o from e adicionamos a tabela secundária com o join. No join tem que ser adicionado o nome da tabela seguido da cláusula ON.
Só executar e testar.