Zend 1: Vazby mezi tabulkami

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

Zdroje:

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *