Fazer joinLeft com Zend_Db_Table_Abstract

Zend_Db, Zend_Db_Table, Zend_Db_Xml

Moderador: diegotremper

Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor Rogerio » Seg Out 05, 2009 5:00 pm

i aew pessoal,
bom minha duvida é a seguinte, tenho 3 tabelas:

menus
Código: Selecionar tudo
      Field, Type, Null, Key, Default, Extra
      cod_menu, int(11), NO, PRI, , auto_increment
      cod_paginas, int(11), NO, MUL, ,
      cod_modulos, int(11), NO, MUL, ,
      descricao, varchar(45), NO, , ,
      


modulos
Código: Selecionar tudo
      Field, Type, Null, Key, Default, Extra
      cod_modulos, int(11), NO, PRI, , auto_increment
      descricao, varchar(50), NO, , ,
      ordem, tinyint(3), YES, , 0,
      status, tinyint(1), YES, , 0,
      


paginas
Código: Selecionar tudo
      Field, Type, Null, Key, Default, Extra
      cod_paginas, int(11), NO, PRI, , auto_increment
      descricao, varchar(150), YES, , ,
      caminho, varchar(150), YES, , ,
      imagem, varchar(45), YES, , ,
      nome, varchar(45), YES, , ,
      ordem, tinyint(3), YES, , ,
      status, tinyint(1) unsigned, YES, , 0,
      

e tenho as classes:
Código: Selecionar tudo
      class Menus extends Zend_Db_Table_Abstract
      {
         protected $_name = 'menus' ;
            protected $_referenceMap =
            array
            (
               'Modulos' => array(
                              'columns'      => array( 'cod_modulos' ) ,
                              'refTableClass' => 'Modulos' ,
                              'refColumns'   => array( 'cod_modulos' )
                              ) ,
               'Paginas' => array(
                              'columns'      => array( 'cod_paginas' ) ,
                              'refTableClass' => 'Paginas' ,
                              'refColumns'   => array( 'cod_paginas' )
                              )
            ) ;
      }
      

Código: Selecionar tudo
      class Modulos extends Zend_Db_Table_Abstract
      {
         protected $_name = 'modulos' ;
         protected $_dependetTables = array( 'Menus' ) ;
      }
      

Código: Selecionar tudo
      class Paginas extends Zend_Db_Table_Abstract
      {
         protected $_name = 'paginas' ;
         protected $_dependetTables = array( 'Menus' ) ;
      }
      

gostaria de saber como retornar todos os dados tipo fetchAll com joinLeft com a tabela menus, se alguem
tiver um exemplo fico grato!
Rogerio
Membro
 
Mensagens: 7
Data de registro: Qua Set 16, 2009 2:36 pm

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor Froskie » Qua Out 07, 2009 3:51 pm

Se tu quer achar quem é o módulo de um menu, basta tu usar o método findParentRow passando o nome da tabela relacionada:

Código: Selecionar tudo
$menus = $menuTable->fetchAll();

foreach($menus as $menu){
    $pagina = $menu->findParentRow('Paginas');
    $modulo = $menu->findParentRow('Modulos');
}


Com isso tu ja tem acesso ao registro.
Avatar de usuário
Froskie
Membro
 
Mensagens: 5
Data de registro: Seg Abr 27, 2009 3:25 pm

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor Rogerio » Sex Out 09, 2009 9:22 am

opa, obrigado por responder Froskie, vou fazer os testes e logo mais posto o resultado grato!
Rogerio
Membro
 
Mensagens: 7
Data de registro: Qua Set 16, 2009 2:36 pm

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor danieldeveloper » Sex Out 09, 2009 4:26 pm

danieldeveloper.com
danieldeveloper
Participante
 
Mensagens: 49
Data de registro: Sex Mai 08, 2009 11:31 am

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor Rogerio » Qui Out 15, 2009 7:13 pm

antes de tudo me desculpem pela demora pela resposta;

bom Froskie essa forma que você me passou funciona sim, mas me parece um pouco estranho
por que ele vai fazer varias consultas dentro do foreach ou estou errado?
eu estava querendo fazer tudo em uma unica query!

opa valeu por tentar ajudar danieldeveloper, mas entao esquece de comentar que a maneira
que estava usando era com Zend_Db_Select, eu estava tentando utilizar apenas a classe Zend_Db_Table_Abstract!

abraço!
Rogerio
Membro
 
Mensagens: 7
Data de registro: Qua Set 16, 2009 2:36 pm

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor RodrigoZ » Seg Nov 23, 2009 10:53 am

Estou com o mesmo problema, mas para fazer join!

Cada classe que vc criou acima, vc fez elas em arquivos diferentes ou apenas dentro de um arquivo no models?!

Abraço!
RodrigoZ
Membro
 
Mensagens: 7
Data de registro: Qua Jan 28, 2009 12:44 pm

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor Rogerio » Qua Nov 25, 2009 9:59 am

RodrigoZ escreveu:Estou com o mesmo problema, mas para fazer join!

Cada classe que vc criou acima, vc fez elas em arquivos diferentes ou apenas dentro de um arquivo no models?!

Abraço!

ola amigo, eu criei em arquivos diferentes!
Rogerio
Membro
 
Mensagens: 7
Data de registro: Qua Set 16, 2009 2:36 pm

Re: Fazer joinLeft com Zend_Db_Table_Abstract

Mensagempor vdsantos » Qua Nov 25, 2009 10:23 am

Rogério,
tente fazer da seguinte forma:

Código: Selecionar tudo
$pagina = new Paginas();
$select = $pagina->select();
$select->joinLeft('menus', 'menus.cod_paginas = cod_paginas', 'menus.cod_paginas')->where('algum where que precisar');
$rows = $table->fetchAll($select);


Tente repetir esse código dentro do modelo de módulos usando o campo de ligação entre os módulos e o menu e veja se consegue retornar algo. O código acima é um esboço, se faltar algo na query, sugiro que você construa o select primeiro, teste no banco e depois siga o manual do Zend para fazer a construção correta do select joinLeft.

http://framework.zend.com/manual/en/zen ... nstructing

[]'s
vdsantos
Participante
 
Mensagens: 53
Data de registro: Seg Jun 08, 2009 2:38 pm
Localização: Guarulhos - SP


Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante