Skip to content

Commit

Permalink
x
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Dec 23, 2024
1 parent 6eb426e commit c5f2efc
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 54 deletions.
12 changes: 8 additions & 4 deletions database/cs/reflection.texy
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,24 @@ $reflection = $database->getReflection();
Práce s tabulkami
-----------------

Pomocí reflexe můžeme procházet všechny tabulky v databázi:
Readonly vlastnost `$reflection->tables` obsahuje asociativní pole všech tabulek v databázi, kde klíčem je název tabulky a hodnotou instance [Table|api:Nette\Database\Reflection\Table].

```php
// Výpis názvů všech tabulek
foreach ($reflection->tables as $tableName => $table) {
echo $tableName . "\n";
foreach ($reflection->tables as $name => $table) {
echo $name . "\n";
}
```

K dispozici jsou ještě dvě metody:

```php
// Ověření existence tabulky
if ($reflection->hasTable('users')) {
echo "Tabulka users existuje";
}

// Získání konkrétní tabulky
// Vrátí objekt tabulky; pokud neexistuje, vyhodí výjimku
$table = $reflection->getTable('users');
```

Expand Down
116 changes: 66 additions & 50 deletions database/cs/reflection2.texy
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,10 @@ $reflection = $database->getReflection();
```


Práce s tabulkami
=================
Získání tabulek
---------------

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`.
Readonly vlastnost `$reflection->tables` obsahuje asociativní pole všech tabulek v databázi:

```php
// Výpis názvů všech tabulek
Expand All @@ -29,37 +23,49 @@ foreach ($reflection->tables as $name => $table) {
}
```

K dispozici jsou ještě dvě metody:

```php
// Ověření existence tabulky
if ($reflection->hasTable('users')) {
echo "Tabulka users existuje";
}

Metody pro práci s tabulkami
----------------------------
// Vrátí objekt tabulky; pokud neexistuje, vyhodí výjimku
$table = $reflection->getTable('users');
```

- `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 tabulce
-------------------

Informace o struktuře tabulky
=============================
Tabulka je reprezentována objektem [Table|api:Nette\Database\Reflection\Table], který poskytuje následující readonly vlastnosti:

Třída [api:Nette\Database\Reflection\Table] 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


Property `columns`: array<string, Column>
-----------------------------------------
Sloupce
-------

Asociativní pole sloupců tabulky, kde klíčem je název sloupce a hodnotou instance `Column` s těmito vlastnostmi:
Vlastnost `$table->columns` tabulky poskytuje asociativní pole sloupců, kde klíčem je název sloupce a hodnotou instance [Column|api:Nette\Database\Reflection\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
- `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

```php
$table = $reflection->getTable('users');
foreach ($table->columns as $name => $column) {
echo "Sloupec: $name\n";
echo "Typ: {$column->nativeType}\n";
Expand All @@ -68,42 +74,52 @@ foreach ($table->columns as $name => $column) {
```


Property `indexes`: Index[]
---------------------------
Indexy
------

Pole všech indexů tabulky. Každý index (`Index`) obsahuje:
Vlastnost `$table->indexes` tabulky poskytuje pole indexů, kde každý index je instance [Index|api:Nette\Database\Reflection\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 (může být NULL)
- `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íč.

Property `primaryKey`: ?Index
-----------------------------
```php
// Výpis indexů
foreach ($table->indexes as $index) {
$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
echo "Index" . ($index->name ? " {$index->name}" : '') . ":\n";
echo " Sloupce: $columns\n";
echo " Unique: " . ($index->unique ? 'Ano' : 'Ne') . "\n";
}

Objekt reprezentující primární klíč tabulky nebo NULL, pokud tabulka nemá primární klíč.
// Výpis primárního klíče
if ($primaryKey = $table->primaryKey) {
$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
echo "Primární klíč: $columns\n";
}
```


Property `foreignKeys`: ForeignKey[]
------------------------------------
Cizí klíče
----------

Pole cizích klíčů tabulky. Každý cizí klíč (`ForeignKey`) obsahuje:
Vlastnost `$table->foreignKeys` tabulky poskytuje pole cizích klíčů, kde každý cizí klíč je instance [ForeignKey|api:Nette\Database\Reflection\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 (může být NULL)
- `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

```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 "FK" . ($fk->name ? " {$fk->name}" : '') . ":\n";
echo " $localCols -> {$fk->foreignTable->name}($foreignCols)\n";
}
```
```

0 comments on commit c5f2efc

Please sign in to comment.