Reflexe struktury
Nette Database poskytuje nástroje pro introspekci databázové struktury pomocí třídy Nette\Database\Reflection. Ta umožňuje získávat informace o tabulkách, sloupcích, indexech a cizích klíčích. Reflexi můžete využít ke generování schémat, vytváření flexibilních aplikací pracujících s databází nebo obecných databázových nástrojů.
Objekt reflexe získáme z instance připojení k databázi:
Získání tabulek
Readonly vlastnost $reflection->tables
obsahuje asociativní pole všech tabulek v databázi:
K dispozici jsou ještě dvě metody:
Informace o tabulce
Tabulka je reprezentována objektem Table, který poskytuje následující readonly vlastnosti:
$name: string
– název tabulky$view: bool
– zda se jedná o pohled$fullName: ?string
– plný název tabulky včetně schématu (pokud existuje)$columns: array<string, Column>
– asociativní pole sloupců tabulky$indexes: Index[]
– pole indexů tabulky$primaryKey: ?Index
– primární klíč tabulky nebo null$foreignKeys: ForeignKey[]
– pole cizích klíčů tabulky
Sloupce
Vlastnost columns
tabulky poskytuje asociativní pole sloupců, kde klíčem je název sloupce a hodnotou instance
Column s těmito vlastnostmi:
$name: string
– název sloupce$table: ?Table
– reference na tabulku sloupce$nativeType: string
– nativní databázový typ$size: ?int
– velikost/délka typu$nullable: bool
– zda může sloupec obsahovat NULL$default: mixed
– výchozí hodnota sloupce$autoIncrement: bool
– zda je sloupec auto-increment$primary: bool
– zda je součástí primárního klíče$vendor: array
– dodatečná metadata specifická pro daný databázový systém
Indexy
Vlastnost indexes
tabulky poskytuje pole indexů, kde každý index je instance Index s těmito vlastnostmi:
$columns: Column[]
– pole sloupců tvořících index$unique: bool
– zda je index unikátní$primary: bool
– zda jde o primární klíč$name: ?string
– název indexu
Primární klíč tabulky lze získat pomocí vlastnosti primaryKey
, která vrací buď objekt Index
,
nebo null
v případě, že tabulka nemá primární klíč.
Cizí klíče
Vlastnost foreignKeys
tabulky poskytuje pole cizích klíčů, kde každý cizí klíč je instance ForeignKey s těmito vlastnostmi:
$foreignTable: Table
– odkazovaná tabulka$localColumns: Column[]
– pole lokálních sloupců$foreignColumns: Column[]
– pole odkazovaných sloupců$name: ?string
– název cizího klíče