Introdução
O conceito básico do relacionamento entre os objetos de dados (objetos extendidos de Zend_Db_Table_Abstract)
é o cascateamento de operações como SELECT, UPDATE e DELETE .
Consulte:
Objetivo
Criar um setor de uma empresa, que possa ter vários funcionários relacionados com ele (um para muitos).
Condições
Quando selecionar o setor, mostrar os seus funcionários, sem usar SELECT em tb_funcionarios, tentar usar o relacionamento para apresenta-los.
Quando um setor for apagado, fazer com que o sistema apague todos os funcionários ralacionados.
Solução
Relacionamento
Primeiro iremos criar as referências entre as objetos de dados chamados DoSetor e DoFuncionario.
Na classe DoSetor inserimos a sua dependencia com o DoFuncionario, usando o parametro $_dependentTables.
class DoSetor extends Zend_Db_Table_Abstract
{
protected $_name = "tb_setor";
protected $_primary = "cd_setor";
protected $_dependentTables = array('DoFuncionario');
}
arquivo: DoSetor.php
Na classe DoFuncionario use o parametro $_referenceMap, passando um array com o nome da referencia as colunas(no caso cd_setor) e as operações permitidas (onDelete e onUpdate como self::CASCADE).
class DoFuncionario extends Zend_Db_Table_Abstract
{
protected $_name = "tb_funcionario";
protected $_primary = "cd_funcionario";
protected $_referenceMap = array(
'DoSetor' => array(
'columns' => array('cd_setor'),
'refTableClass' => 'DoSetor',
'refColumns' => array('cd_setor'),
'onDelete' => self::CASCADE,
'onUpdate' => self::CASCADE
)
);
}
arquivo: DoFuncionario.php
Exibição dos Dados
Quando a consulta é pelo o objeto dependente usa-se doObjeto->FindParentRow(“nome_obj_relacao”), no nosso caso seleciona-se o
Funcionário e depois procura-se o seu Setor.
Quando é o objeto que possue dependentes usa-se doObjeto->findDoObjeto_Dependente, no nosso caso coloa-se o Funcionário
como parametro na chamada do método.
echo "Listando por Cliente:";
$funcionario = $doFuncionario->fetchAll();
foreach($funcionario as $currentFuncionario)
{
$setor = $currentFuncionario->FindParentRow("DoSetor");
echo "{$currentFuncionario->nm_funcionario} - {$setor->nm_setor}\n";
}
echo "Listando por Setor:";
$setor= $doSetor->fetchAll();
foreach($setor as $currentSetor)
{
$funcionario = $currentSetor->findDoFuncionario();
foreach($funcionario as $currentFuncionario)
{
echo "{$currentSetor->nm_setor} - {$currentFuncionario->nm_funcionario}\n";
}
}
arquivo Ex0001Controller.php
Excluindo Registro
Ao apagar um setor, apaga-se todos os funcionários relacionados.
echo "Apagando setor: Financeiro.";
$setor = $doSetor->find($cd_setor);
$setor = $setor->current();
$setor->delete();
arquivo Ex0001Controller.php
Conclusão
A vantagem de usar este tipo de dependência é o fato de não se preocupar com a integridade dos dados, e dexando a responsabilidade para o ZF.
Quando ocorrerem relacionamentos mais complexos, estas referências facilitam a implementação das regras de negócio.

Artigo muito bom… Obrigado