-
-
Notifications
You must be signed in to change notification settings - Fork 281
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
126 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
Reflexe struktury | ||
***************** | ||
|
||
.{data-version:3.2.1} | ||
Nette Database poskytuje nástroje pro introspekci databázové struktury pomocí třídy [api: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: | ||
|
||
```php | ||
$reflection = $database->getReflection(); | ||
``` | ||
|
||
|
||
Práce s tabulkami | ||
================= | ||
|
||
Přístup k tabulkám poskytuje třída `Nette\Database\Reflection`: | ||
|
||
|
||
Property `tables`: array<string, Table> | ||
--------------------------------------- | ||
|
||
Readonly vlastnost obsahující asociativní pole všech tabulek v databázi, kde klíčem je název tabulky a hodnotou instance `Table`. | ||
|
||
```php | ||
// Výpis názvů všech tabulek | ||
foreach ($reflection->tables as $name => $table) { | ||
echo $name . "\n"; | ||
} | ||
``` | ||
|
||
|
||
Metody pro práci s tabulkami | ||
---------------------------- | ||
|
||
- `getTables(): Table[]` - Vrací indexované pole všech tabulek | ||
- `hasTable(string $name): bool` - Ověří existenci tabulky | ||
- `getTable(string $name): Table` - Vrátí objekt reprezentující danou tabulku. Pokud tabulka neexistuje, vyhodí výjimku. | ||
|
||
|
||
Informace o struktuře tabulky | ||
============================= | ||
|
||
Třída [api:Nette\Database\Reflection\Table] poskytuje následující readonly vlastnosti: | ||
|
||
|
||
Property `columns`: array<string, Column> | ||
----------------------------------------- | ||
|
||
Asociativní pole sloupců tabulky, kde klíčem je název sloupce a hodnotou instance `Column` s těmito vlastnostmi: | ||
|
||
- `name`: string - Název 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 nebo NULL | ||
- `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 | ||
|
||
```php | ||
$table = $reflection->getTable('users'); | ||
foreach ($table->columns as $name => $column) { | ||
echo "Sloupec: $name\n"; | ||
echo "Typ: {$column->nativeType}\n"; | ||
echo "Nullable: " . ($column->nullable ? 'Ano' : 'Ne') . "\n"; | ||
} | ||
``` | ||
|
||
|
||
Property `indexes`: Index[] | ||
--------------------------- | ||
|
||
Pole všech indexů tabulky. Každý index (`Index`) obsahuje: | ||
|
||
- `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 (může být NULL) | ||
|
||
|
||
Property `primaryKey`: ?Index | ||
----------------------------- | ||
|
||
Objekt reprezentující primární klíč tabulky nebo NULL, pokud tabulka nemá primární klíč. | ||
|
||
|
||
Property `foreignKeys`: ForeignKey[] | ||
------------------------------------ | ||
|
||
Pole cizích klíčů tabulky. Každý cizí klíč (`ForeignKey`) obsahuje: | ||
|
||
- `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 (může být NULL) | ||
|
||
```php | ||
$table = $reflection->getTable('books'); | ||
|
||
// Výpis cizích klíčů | ||
foreach ($table->foreignKeys as $fk) { | ||
$localCols = implode(', ', array_map(fn($col) => $col->name, $fk->localColumns)); | ||
$foreignCols = implode(', ', array_map(fn($col) => $col->name, $fk->foreignColumns)); | ||
|
||
echo "FK {$fk->name}:\n"; | ||
echo " $localCols -> {$fk->foreignTable->name}($foreignCols)\n"; | ||
} | ||
``` |