Nette Documentation Preview

syntax
Reflexe
*******

.{data-version:3.2.1}
Podatkovna baza Nette zagotavlja orodja za introspekcijo strukture podatkovne baze z uporabo razreda [api:Nette\Database\Reflection\Reflection]. Ta omogoča pridobivanje informacij o tabelah, stolpcih, indeksih in tujih ključih. Refleksijo lahko uporabite za izdelavo sheme, ustvarjanje prilagodljivih aplikacij, ki temeljijo na podatkovni zbirki, ali splošnih orodij za podatkovne zbirke.

Objekt refleksije lahko pridobite iz primerka povezave s podatkovno bazo:

```php
$reflection = $connection->getReflection();
```


Delo s tabelami .[#toc-working-with-tables]
===========================================

Z uporabo refleksije lahko pregledujemo vse tabele v zbirki podatkov:


getTables(): Nette\Database\Reflection\Table[] .[method]
--------------------------------------------------------
Vrne asociativno polje, kjer je ključ ime tabele, vrednost pa polje metapodatkov tabele.

```php
// Navedba vseh imen tabel
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}
```


hasTable(string $name): bool .[method]
--------------------------------------
Vrne `true`, če tabela obstaja, sicer `false`.

```php
// Preverjanje obstoja tabele
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}
```


getTable(string $name): Nette\Database\Reflection\Table .[method]
-----------------------------------------------------------------
Vrne predmet `Nette\Database\Reflection\Table`, ki predstavlja dano tabelo. Če tabela ne obstaja, vrže izjemo `Nette\Database\Exception\MissingTableException`.

```php
// Pridobivanje določene tabele
$table = $reflection->getTable('users');
```


Informacije o stolpcih .[#toc-information-about-columns]
========================================================

Objekt [api:Nette\Database\Reflection\Table], ki ga dobite s klicem `getTable()`, omogoča pridobitev podrobnih informacij o stolpcih tabele.


getColumns(): Nette\Database\Reflection\Column[] .[method]
----------------------------------------------------------
Vrne polje objektov `Nette\Database\Reflection\Column`, ki predstavljajo stolpce tabele.


getColumn(string $name): Nette\Database\Reflection\Column .[method]
-------------------------------------------------------------------
Vrne objekt [api:Nette\Database\Reflection\Column], ki predstavlja dani stolpec. Če stolpec ne obstaja, vrže izjemo `Nette\Database\Exception\MissingColumnException`.

Predmet `Column` ima naslednje lastnosti:

- `name`: Ime stolpca.
- `nativeType`: Podatkovni tip stolpca, specifičen za podatkovno zbirko.
- `type`: Normalizirani podatkovni tip stolpca (glej konstante `Nette\Utils\Type`).
- `nullable`: `true`, če stolpec lahko vsebuje `NULL`, sicer `false`.
- `primary`: `true`, če je stolpec del primarnega ključa, sicer `false`.
- `autoIncrement`: `true`, če je stolpec samodejno povečan, sicer `false`.
- `default`: privzeta vrednost stolpca ali `null`, če ni določena.
- `vendor`: Polje z dodatnimi informacijami, značilnimi za podatkovno zbirko.

```php
// Iteriranje po vseh stolpcih v tabeli "users
$table = $reflection->getTable('users');
foreach ($table->getColumns() as $column) {
	echo "Column: " . $column->name . "\n";
	echo "Type: " . $column->nativeType . "\n";
	echo "Allows NULL: " . ($column->nullable ? 'Yes': 'No') . "\n";
	echo "Default value: " . ($column->default ?? 'None') . "\n";
	echo "Is primary key: " . ($column->primary ? 'Yes': 'No') . "\n";
	echo "Is auto-increment: " . ($column->autoIncrement ? 'Yes': 'No') . "\n";
}

// Pridobivanje določenega stolpca
$idColumn = $table->getColumn('id');
```


Indeksi in primarni ključi .[#toc-indexes-and-primary-keys]
===========================================================


getIndexes(): Nette\Database\Reflection\Index[] .[method]
---------------------------------------------------------
Vrne polje objektov `Nette\Database\Reflection\Index`, ki predstavljajo indekse tabel.


getIndex(string $name): Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------------
Vrne objekt [api:Nette\Database\Reflection\Index], ki predstavlja dani indeks. Če indeks ne obstaja, vrže izjemo `Nette\Database\Exception\MissingIndexException`.


getPrimaryKey(): ?Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------
Vrne predmet `Nette\Database\Reflection\Index`, ki predstavlja primarni ključ tabele, ali `null`, če tabela nima primarnega ključa.

Predmet `Index` ima naslednje lastnosti:

- `name`: Ime indeksa.
- `columns`: Polje objektov `Nette\Database\Reflection\Column`, ki predstavljajo stolpce, ki so del indeksa.
- `unique`: `true`, če je indeks edinstven, sicer `false`.
- `primary`: `true`, če je indeks primarni ključ, sicer `false`.

```php
$table = $reflection->getTable('users');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

// Seznam vseh indeksov
foreach ($table->getIndexes() as $index) {
	echo "Index: " . ($index->name ?? 'Unnamed') . "\n";
	echo "Columns: " . $printColumnNames($index->columns) . "\n";
	echo "Is unique: " . ($index->unique ? 'Yes': 'No') . "\n";
	echo "Is primary key: " . ($index->primary ? 'Yes': 'No') . "\n";
}

// Pridobitev primarnega ključa
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
```


Tuji ključi .[#toc-foreign-keys]
================================


getForeignKeys(): Nette\Database\Reflection\ForeignKey[] .[method]
------------------------------------------------------------------
Vrne polje objektov `Nette\Database\Reflection\ForeignKey`, ki predstavljajo tuje ključe tabele.


getForeignKey(string $name): Nette\Database\Reflection\ForeignKey .[method]
---------------------------------------------------------------------------
Vrne objekt [api:Nette\Database\Reflection\ForeignKey], ki predstavlja dani tuji ključ. Če tuji ključ ne obstaja, vrže izjemo `Nette\Database\Exception\MissingForeignKeyException`.

Predmet `ForeignKey` ima naslednje lastnosti:

- `name`: Ime tujega ključa.
- `localColumns`: Polje objektov `Nette\Database\Reflection\Column`, ki predstavljajo lokalne stolpce, ki sestavljajo tuji ključ.
- `foreignTable`: Objekt `Nette\Database\Reflection\Table`, ki predstavlja tujo tabelo, na katero se sklicuje tuji ključ.
- `foreignColumns`: Polje `Nette\Database\Reflection\Column` objektov, ki predstavljajo tuje stolpce, na katere se sklicuje tuji ključ.

```php
$table = $reflection->getTable('books');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

foreach ($table->getForeignKeys() as $fk) {
	echo "Foreign key: " . ($fk->name ?? 'Unnamed') . "\n";
	echo "Local columns: " . $printColumnNames($fk->localColumns) . "\n";
	echo "References table: {$fk->foreignTable->name}\n";
	echo "References columns: " . $printColumnNames($fk->foreignColumns) . "\n";
}
```

Reflexe

Podatkovna baza Nette zagotavlja orodja za introspekcijo strukture podatkovne baze z uporabo razreda Nette\Database\Reflection\Reflection. Ta omogoča pridobivanje informacij o tabelah, stolpcih, indeksih in tujih ključih. Refleksijo lahko uporabite za izdelavo sheme, ustvarjanje prilagodljivih aplikacij, ki temeljijo na podatkovni zbirki, ali splošnih orodij za podatkovne zbirke.

Objekt refleksije lahko pridobite iz primerka povezave s podatkovno bazo:

$reflection = $connection->getReflection();

Delo s tabelami

Z uporabo refleksije lahko pregledujemo vse tabele v zbirki podatkov:

getTables(): Nette\Database\Reflection\Table[]

Vrne asociativno polje, kjer je ključ ime tabele, vrednost pa polje metapodatkov tabele.

// Navedba vseh imen tabel
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}

hasTable(string $name): bool

Vrne true, če tabela obstaja, sicer false.

// Preverjanje obstoja tabele
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}

getTable(string $name): Nette\Database\Reflection\Table

Vrne predmet Nette\Database\Reflection\Table, ki predstavlja dano tabelo. Če tabela ne obstaja, vrže izjemo Nette\Database\Exception\MissingTableException.

// Pridobivanje določene tabele
$table = $reflection->getTable('users');

Informacije o stolpcih

Objekt Nette\Database\Reflection\Table, ki ga dobite s klicem getTable(), omogoča pridobitev podrobnih informacij o stolpcih tabele.

getColumns(): Nette\Database\Reflection\Column[]

Vrne polje objektov Nette\Database\Reflection\Column, ki predstavljajo stolpce tabele.

getColumn(string $name): Nette\Database\Reflection\Column

Vrne objekt Nette\Database\Reflection\Column, ki predstavlja dani stolpec. Če stolpec ne obstaja, vrže izjemo Nette\Database\Exception\MissingColumnException.

Predmet Column ima naslednje lastnosti:

  • name: Ime stolpca.
  • nativeType: Podatkovni tip stolpca, specifičen za podatkovno zbirko.
  • type: Normalizirani podatkovni tip stolpca (glej konstante Nette\Utils\Type).
  • nullable: true, če stolpec lahko vsebuje NULL, sicer false.
  • primary: true, če je stolpec del primarnega ključa, sicer false.
  • autoIncrement: true, če je stolpec samodejno povečan, sicer false.
  • default: privzeta vrednost stolpca ali null, če ni določena.
  • vendor: Polje z dodatnimi informacijami, značilnimi za podatkovno zbirko.
// Iteriranje po vseh stolpcih v tabeli "users
$table = $reflection->getTable('users');
foreach ($table->getColumns() as $column) {
	echo "Column: " . $column->name . "\n";
	echo "Type: " . $column->nativeType . "\n";
	echo "Allows NULL: " . ($column->nullable ? 'Yes': 'No') . "\n";
	echo "Default value: " . ($column->default ?? 'None') . "\n";
	echo "Is primary key: " . ($column->primary ? 'Yes': 'No') . "\n";
	echo "Is auto-increment: " . ($column->autoIncrement ? 'Yes': 'No') . "\n";
}

// Pridobivanje določenega stolpca
$idColumn = $table->getColumn('id');

Indeksi in primarni ključi

getIndexes(): Nette\Database\Reflection\Index[]

Vrne polje objektov Nette\Database\Reflection\Index, ki predstavljajo indekse tabel.

getIndex(string $name): Nette\Database\Reflection\Index

Vrne objekt Nette\Database\Reflection\Index, ki predstavlja dani indeks. Če indeks ne obstaja, vrže izjemo Nette\Database\Exception\MissingIndexException.

getPrimaryKey(): ?Nette\Database\Reflection\Index

Vrne predmet Nette\Database\Reflection\Index, ki predstavlja primarni ključ tabele, ali null, če tabela nima primarnega ključa.

Predmet Index ima naslednje lastnosti:

  • name: Ime indeksa.
  • columns: Polje objektov Nette\Database\Reflection\Column, ki predstavljajo stolpce, ki so del indeksa.
  • unique: true, če je indeks edinstven, sicer false.
  • primary: true, če je indeks primarni ključ, sicer false.
$table = $reflection->getTable('users');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

// Seznam vseh indeksov
foreach ($table->getIndexes() as $index) {
	echo "Index: " . ($index->name ?? 'Unnamed') . "\n";
	echo "Columns: " . $printColumnNames($index->columns) . "\n";
	echo "Is unique: " . ($index->unique ? 'Yes': 'No') . "\n";
	echo "Is primary key: " . ($index->primary ? 'Yes': 'No') . "\n";
}

// Pridobitev primarnega ključa
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}

Tuji ključi

getForeignKeys(): Nette\Database\Reflection\ForeignKey[]

Vrne polje objektov Nette\Database\Reflection\ForeignKey, ki predstavljajo tuje ključe tabele.

getForeignKey(string $name): Nette\Database\Reflection\ForeignKey

Vrne objekt Nette\Database\Reflection\ForeignKey, ki predstavlja dani tuji ključ. Če tuji ključ ne obstaja, vrže izjemo Nette\Database\Exception\MissingForeignKeyException.

Predmet ForeignKey ima naslednje lastnosti:

  • name: Ime tujega ključa.
  • localColumns: Polje objektov Nette\Database\Reflection\Column, ki predstavljajo lokalne stolpce, ki sestavljajo tuji ključ.
  • foreignTable: Objekt Nette\Database\Reflection\Table, ki predstavlja tujo tabelo, na katero se sklicuje tuji ključ.
  • foreignColumns: Polje Nette\Database\Reflection\Column objektov, ki predstavljajo tuje stolpce, na katere se sklicuje tuji ključ.
$table = $reflection->getTable('books');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

foreach ($table->getForeignKeys() as $fk) {
	echo "Foreign key: " . ($fk->name ?? 'Unnamed') . "\n";
	echo "Local columns: " . $printColumnNames($fk->localColumns) . "\n";
	echo "References table: {$fk->foreignTable->name}\n";
	echo "References columns: " . $printColumnNames($fk->foreignColumns) . "\n";
}