Tabulky v relační databázi mohou mít (a také běžně mají) mezi sebou vazby.
Záznam v jedné tabulce může být propojen s jedním či více záznamy z tabulky druhé.
Třída Zend_Db_Table_Row obsahuje funkce pro dotazování souvisejících záznamů.
Nadřazená tabulka je tabulka ve vztahu, která obsahuje hlavní údaje.
Závislá tabulka je tabulka obsahující cizí klíč (parent_id).
Definice vazeb mezi tabulkami
Každá tabulka je reprezentována třídou rozšiřující třídu Zend_Db_Table_Abstract.
class Accounts extends Zend_Db_Table_Abstract{} class Products extends Zend_Db_Table_Abstract{} class Bugs extends Zend_Db_Table_Abstract{} class BugsProducts extends Zend_Db_Table_Abstract{}
$_dependentTables
Vlastnost $_dependentTables deklarujeme v třídě nadřazené tabulky.
Jako hodnotu uvádíme pole obsahující názvy tříd závislých tabulek.
Třída Accounts:
protected $_dependentTables = array('Bugs');
Třída Products:
protected $_dependentTables = array('BugsProducts');
Třída Bugs:
protected $_dependentTables = array('BugsProducts');
$_referenceMap
Vlastnost $_referenceMap deklarujeme v třídě závislé tabulky.
Jako hodnotu uvádíme pole obsahující referenční pravidla:
- identifikace nadřazené tabulky
- které sloupce v závislé tabulce odkazují na které sloupce v nadřazené tabulce
Bugs:
protected $_referenceMap = array( 'Reporter' => array( 'columns' => 'reported_by', 'refTableClass' => 'Accounts', 'refColumns' => 'account_name' ), 'Engineer' => array( 'columns' => 'assigned_to', 'refTableClass' => 'Accounts', 'refColumns' => 'account_name' ), 'Verifier' => array( 'columns' => array('verified_by'), 'refTableClass' => 'Accounts', 'refColumns' => array('account_name') ) );
Klíče pole:
- columns – název (názvy) cizího klíče v závislé tabulce (řetězec nebo pole)
- refTableClass – název třídy nadřazené tabulky (řetězec)
- refColumns – název primárního klíče nadřazené tabulky (řetězec nebo pole)
- onDelete – pravidlo pro provedení akce v případě smazání řádku z nadřazené tabulky
- onUpdate – pravidlo pro provedení akce v případě aktualizace řádku v nadřazené tabulce
- self::CASCADE, self::RESTRICT, self::CASCADE_RECURSE