Auto-relacionamento
Pessoal, tenho uma classe de categoria, mas ela pode ser filha dela mesmo, assim criando uma arvrore. Quando o idpai for 0, ele é root (raiz)
<?php
class Application_Model_Categorias extends Zend_Db_Table_Abstract {
protected $_name = "categorias";
protected $_cols = array(
'idcategoria',
'nome',
'descricao',
'idpai'
);
protected $_dependentTables = array('Categorias');
// Seta as chaves extangeiras
protected $_referenceMap = array(
'CategoriaPai' => array(
'columns' => array("idpai"),
'refTableClass' => "Categorias",
'refColumns' => array("idcategoria")
)
);
}
Não consigo buscar o nome do pai. No meu controlador, eu dou o fetchAll()
/**
* Ação Index
*
* @indexAction
*/
public function indexAction() {
// Configura a query
$query = $this->_model->select()->order("nome");
// Lista de produtos
$list = $this->_model->fetchAll($query);
// Assina as variaveis
$this->view->assign("list", $list);
}
E no view
<a href="{$this->url(["controller"=>"categorias", "action"=>"form"])}" class="uri-novo">Novo</a>
<table class="table-list">
<thead>
<tr>
<th width="80">ID</th>
<th>Nome</th>
<th>Pai</th>
<th width="60"> </th>
</tr>
</thead>
<tbody>
{foreach from=$list item=item}
<tr>
<td>{$item['idcategoria']}</td>
<td>{$item['nome']}</td>
<td>{$item['pai']</td>
<td>
...
</td>
</tr>
{/foreach}
</tbody>
</table>
Note no view, $item['pai']. Gostaria que esse index fosse a descrição do pai, mas não to conseguindo fazer isso. Achei umas pessoas dando o foreach no controle, e ir montando um vetor para assiar esse vetor para o view, mas fico imaginando ter 500 categorias, assim darei 1000 loops, 500 no controle, 500 no view, não acho que seja certo.
Alguem tem idéia de como fazer isso pelo model? fazer com que ele ja traga o item relacionado (caso houver relação)
De qualquer forma, se alguem puder me explicar como criar um outer join, talvez tambem ajude, mas preferiria fazer isso pelo model =)
Valeu gente
Discussão (3)
Carregando comentários...