Trabalhando com relacionamento de tabelas no Zend Db Table

Existe uma facilidade muito grande para se trabalhar com relacionamento de tabelas no Zend Framework, e evita-se aquelas enormes querys para trazer meia dúzia de dados.

Após criar os Models via Zend_Tool

zf create model nome-da-tabela

Abra o model da tabela principal e insira na classe a linha que registra qual a tabela filha:

protected $_dependentTables = array('Application_Model_DbTable_NomeDaTabelaFilha');

Em seguida, abra a tabela filha e registre mapeamento dos campos de relacionamento:

protected $_referenceMap = array(
	//Array das tabelas relacionadas
	'Empresa' => array(
		//Nome da Tabela relacionada
		'refTableClass'=>'Application_Model_DbTable_NomeDaTabelaPai',
		//Campo de relacionamento da tabela pai
		'refColumns'=>'id',
		//Campo de relacionamento da tabela filha
		'columns'=>'empresa_id',
		//Opcionais
		'onDelete'=>self::CASCADE,
		'onUpdate'=>self::RESTRICT
		)
	);

A partir de agora você pode chamar diretamente no seu controller:

$tabela_principal = new NomeDoModel();
$this->view->dados = $tabela_principal->fetchAll();

 E na sua view fazer o tratamento com um “foreach”, a única coisa que deverá ser acrescentada é no ponto onde você quer as informações da tabela filha usar o seguinte comando:

$tabela_secundaria = $tabela_principal->findDependentRowSet('Application_Model_DbTable_NomeDaTabelaFilha');

Isto retorna um array que poderá ser tratado norlmamente com o uso de um foreach.