Olá, Roger, a essa altura você já deve ter resolvido, mas pegando o
problema do começo, creio que só tinha um detalhe a mudar.
Como eu não vi o seu código completo nem sei como é o banco, eu fiz um
exemplo "parecido".
Eu usei um banco MySQL. Vou passar as DDLs e DMLs:
CREATE DATABASE `localidade` ;
CREATE TABLE `UF` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 80 ) NOT NULL ,
INDEX ( `nome` )
) ENGINE = MYISAM ;
CREATE TABLE `CAPITAIS` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 80 ) NOT NULL ,
`id_uf` INT NOT NULL ,
INDEX ( `nome` , `id_uf` )
) ENGINE = MYISAM ;
iNSERT INTO `localidade`.`uf` (
`id` ,
`nome`
)
VALUES (
NULL , 'AC'
), (
NULL , 'AL'
), (
NULL , 'AM'
), (
NULL , 'AP'
), (
NULL , 'BA'
), (
NULL , 'CE'
), (
NULL , 'DF'
), (
NULL , 'ES'
), (
NULL , 'GO'
), (
NULL , 'MA'
), (
NULL , 'MG'
), (
NULL , 'MS'
), (
NULL , 'MT'
), (
NULL , 'PA'
), (
NULL , 'PB'
), (
NULL , 'PE'
), (
NULL , 'PI'
), (
NULL , 'PR'
), (
NULL , 'RJ'
), (
NULL , 'RN'
), (
NULL , 'RO'
), (
NULL , 'RR'
), (
NULL , 'RS'
), (
NULL , 'SC'
), (
NULL , 'SE'
), (
NULL , 'SP'
), (
NULL , 'TO'
);
iNSERT INTO `localidade`.`capitais` (
`id` ,
`nome`,
`id_uf`
)
VALUES (
NULL , 'Rio Branco',1
), (
NULL , 'Maceió',2
), (
NULL , 'Manaus',3
), (
NULL , 'Macapá',4
), (
NULL , 'Salvador',5
), (
NULL , 'Fortaleza',6
), (
NULL , 'Brasília',7
), (
NULL , 'Vitória',8
), (
NULL , 'Goiânia',9
), (
NULL , 'São Luís',10
), (
NULL , 'Belo Horizonte',11
), (
NULL , 'Campo Grande',12
), (
NULL , 'Cuiabá',13
), (
NULL , 'Belém',14
), (
NULL , 'João Pessoa',15
), (
NULL , 'Recife',16
), (
NULL , 'Teresina',17
), (
NULL , 'Curitiba',18
), (
NULL , 'Rio de Janeiro',19
), (
NULL , 'Natal',20
), (
NULL , 'Porto Velho',21
), (
NULL , 'Boa Vista',22
), (
NULL , 'Porto Alegre',23
), (
NULL , 'Florianópolis',24
), (
NULL , 'Aracaju',25
), (
NULL , 'São Paulo',26
), (
NULL , 'Palmas',27
);
Pra ficar bem simples mesmo, eu usei o indexAction do IndexController:
public function indexAction()
{
$db = Zend_Registry::get('db');
$select = $db->select()->from(array('u' => 'uf'),
array('UF' => 'nome'))
->join(array('c' => 'capitais'),
'
u.id = c.id_uf',array('capital' =>
'nome'))
->order(array('UF'));
$stmt = $db->query($select);
$this->view->lista = $stmt->fetchAll();
}
No template index.phtml ficou assim:
<select name="name" size="4">
<?php
$lista = $this->lista;
foreach($lista as $result)
{
?>
<option value="<?=$this->escape($result['capital'])?>"><?=$this-
>escape($result['UF'])?>
</option>
<?php
}
?>
</select>
Bem, o resultado foi apresentado corretamente. O que tem de diferente
do que eu fiz para o que você fez?
Veja, eu chamei os atributos com chaves de array e não como
propriedades de um objeto. Estranho? Sim. Mas funciona. Assim que eu
recuperar meu login do Issue Tracker, vou reportar esse problema, se
alguém não fizer antes.
Só postei isso aqui porque o problema em si é simples de resolver.
Espero que sirva pra algo.